summaryrefslogtreecommitdiff
path: root/gtk/tests
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2013-05-15 01:48:18 +0200
committerBenjamin Otte <otte@redhat.com>2013-05-15 15:37:16 +0200
commitbdfb55c9451e59e097a0e413402f2fa86bd2ae48 (patch)
treef30fbf1c2bba93171159fbc1c202c33faf45ce41 /gtk/tests
parent6ea4c144ddfdf1208b44845dee1a40c2eec91e65 (diff)
downloadgtk+-bdfb55c9451e59e097a0e413402f2fa86bd2ae48.tar.gz
build: Move gtk/tests to testsuite/gtk
Diffstat (limited to 'gtk/tests')
-rw-r--r--gtk/tests/Makefile.am192
-rw-r--r--gtk/tests/accel.c123
-rw-r--r--gtk/tests/accessible.c35
-rw-r--r--gtk/tests/action.c90
-rw-r--r--gtk/tests/bitmask.c385
-rw-r--r--gtk/tests/builder.c2776
-rw-r--r--gtk/tests/cellarea.c863
-rw-r--r--gtk/tests/crossingevents.c628
-rw-r--r--gtk/tests/defaultvalue.c347
-rw-r--r--gtk/tests/entry.c319
-rw-r--r--gtk/tests/expander.c92
-rw-r--r--gtk/tests/file-chooser-test-dir/empty0
-rw-r--r--gtk/tests/file-chooser-test-dir/text.txt1
-rw-r--r--gtk/tests/filechooser.c2492
-rw-r--r--gtk/tests/filtermodel.c7147
-rw-r--r--gtk/tests/floating.c55
-rw-r--r--gtk/tests/grid.c236
-rw-r--r--gtk/tests/gtkmenu.c452
-rw-r--r--gtk/tests/gtktreemodelrefcount.c313
-rw-r--r--gtk/tests/gtktreemodelrefcount.h132
-rw-r--r--gtk/tests/keyhash.c203
-rw-r--r--gtk/tests/liststore.c1139
-rw-r--r--gtk/tests/modelrefcount.c976
-rw-r--r--gtk/tests/object.c329
-rw-r--r--gtk/tests/objects-finalize.c114
-rw-r--r--gtk/tests/papersize.c126
-rw-r--r--gtk/tests/rbtree.c525
-rw-r--r--gtk/tests/recentmanager.c309
-rw-r--r--gtk/tests/regression-tests.c68
-rw-r--r--gtk/tests/sortmodel.c1243
-rw-r--r--gtk/tests/stylecontext.c359
-rw-r--r--gtk/tests/templates.c359
-rw-r--r--gtk/tests/testing.c306
-rw-r--r--gtk/tests/textbuffer.c1341
-rw-r--r--gtk/tests/textiter.c269
-rw-r--r--gtk/tests/treemodel.c345
-rw-r--r--gtk/tests/treemodel.h58
-rw-r--r--gtk/tests/treepath.c181
-rw-r--r--gtk/tests/treestore.c1178
-rw-r--r--gtk/tests/treeview-scrolling.c1494
-rw-r--r--gtk/tests/treeview.c243
-rw-r--r--gtk/tests/window.c361
42 files changed, 0 insertions, 28204 deletions
diff --git a/gtk/tests/Makefile.am b/gtk/tests/Makefile.am
deleted file mode 100644
index ea5b759384..0000000000
--- a/gtk/tests/Makefile.am
+++ /dev/null
@@ -1,192 +0,0 @@
-include $(top_srcdir)/Makefile.decl
-
-SUBDIRS =
-
-AM_CPPFLAGS = \
- -I$(top_srcdir) \
- -I$(top_builddir)/gdk \
- -I$(top_srcdir)/gdk \
- -I$(top_builddir)/gtk \
- -I$(top_srcdir)/gtk \
- -DSRCDIR=\""$(abs_srcdir)"\" \
- $(GTK_DEBUG_FLAGS) \
- $(GTK_DEP_CFLAGS)
-
-if OS_UNIX
-AM_CPPFLAGS += -DHAVE_UNIX_PRINT_WIDGETS
-endif
-
-DEPS = \
- $(top_builddir)/gtk/libgtk-3.la
-
-progs_ldadd = \
- $(top_builddir)/gtk/libgtk-3.la \
- $(top_builddir)/gdk/libgdk-3.la \
- $(GTK_DEP_LIBS)
-
-noinst_PROGRAMS = $(TEST_PROGS)
-
-
-TEST_PROGS += testing
-testing_SOURCES = testing.c
-testing_LDADD = $(progs_ldadd)
-
-TEST_PROGS += treemodel
-treemodel_SOURCES = \
- treemodel.h \
- treemodel.c \
- liststore.c \
- treestore.c \
- filtermodel.c \
- sortmodel.c \
- modelrefcount.c \
- gtktreemodelrefcount.h \
- gtktreemodelrefcount.c
-treemodel_LDADD = $(progs_ldadd)
-
-TEST_PROGS += treeview
-treeview_SOURCES = treeview.c
-treeview_LDADD = $(progs_ldadd)
-
-TEST_PROGS += treeview-scrolling
-treeview_scrolling_SOURCES = treeview-scrolling.c
-treeview_scrolling_LDADD = $(progs_ldadd) -lm
-
-TEST_PROGS += recentmanager
-recentmanager_SOURCES = recentmanager.c
-recentmanager_LDADD = $(progs_ldadd)
-
-TEST_PROGS += floating
-floating_SOURCES = floating.c
-floating_LDADD = $(progs_ldadd)
-
-TEST_PROGS += accel
-accel_SOURCES = accel.c
-accel_LDADD = $(progs_ldadd)
-
-#TEST_PROGS += object
-#object_SOURCES = object.c
-#object_LDADD = $(progs_ldadd)
-
-# this doesn't work in make distcheck, since running
-# on a naked X server creates slightly different event
-# sequences than running on a normal desktop
-# TEST_PROGS += crossingevents
-#crossingevents_SOURCES = crossingevents.c
-#crossingevents_LDADD = $(progs_ldadd)
-
-TEST_PROGS += filechooser
-filechooser_SOURCES = filechooser.c
-filechooser_LDADD = $(progs_ldadd)
-
-TEST_PROGS += builder
-builder_SOURCES = builder.c
-builder_LDADD = $(progs_ldadd)
-builder_LDFLAGS = -export-dynamic
-
-TEST_PROGS += templates
-templates_SOURCES = templates.c
-templates_LDADD = $(progs_ldadd)
-
-if OS_UNIX
-#TEST_PROGS += defaultvalue
-#defaultvalue_SOURCES = defaultvalue.c
-#defaultvalue_LDADD = $(progs_ldadd)
-endif
-
-TEST_PROGS += textbuffer
-textbuffer_SOURCES = textbuffer.c
-textbuffer_LDADD = $(progs_ldadd)
-
-TEST_PROGS += textiter
-textiter_SOURCES = textiter.c
-textiter_LDADD = $(progs_ldadd)
-
-TEST_PROGS += expander
-expander_SOURCES = expander.c
-expander_LDADD = $(progs_ldadd)
-
-TEST_PROGS += action
-action_SOURCES = action.c
-action_LDADD = $(progs_ldadd)
-
-TEST_PROGS += stylecontext
-stylecontext_SOURCES = stylecontext.c
-stylecontext_LDADD = $(progs_ldadd)
-
-TEST_PROGS += papersize
-papersize_SOURCES = papersize.c
-papersize_LDADD = $(progs_ldadd)
-
-TEST_PROGS += cellarea
-cellarea_SOURCES = cellarea.c
-cellarea_LDADD = $(progs_ldadd)
-
-TEST_PROGS += treepath
-treepath_SOURCES = treepath.c
-treepath_LDADD = $(progs_ldadd)
-
-TEST_PROGS += accessible
-accessible_SOURCES = accessible.c
-accessible_LDADD = $(progs_ldadd)
-
-TEST_PROGS += entry
-entry_SOURCES = entry.c
-entry_LDADD = $(progs_ldadd)
-
-TEST_PROGS += grid
-grid_SOURCES = grid.c
-grid_LDADD = $(progs_ldadd)
-
-TEST_PROGS += rbtree
-rbtree_CFLAGS = -DGTK_COMPILATION -UG_ENABLE_DEBUG
-rbtree_SOURCES = rbtree.c \
- $(top_srcdir)/gtk/gtkrbtree.h \
- $(top_srcdir)/gtk/gtkrbtree.c
-rbtree_LDADD = $(GTK_DEP_LIBS)
-
-TEST_PROGS += bitmask
-bitmask_CFLAGS = -DGTK_COMPILATION -UG_ENABLE_DEBUG
-bitmask_SOURCES = bitmask.c \
- $(top_srcdir)/gtk/gtkbitmaskprivate.h \
- $(top_srcdir)/gtk/gtkallocatedbitmaskprivate.h \
- $(top_srcdir)/gtk/gtkallocatedbitmask.c
-bitmask_LDADD = $(GTK_DEP_LIBS)
-
-TEST_PROGS += regression-tests
-regression_tests_SOURCES = regression-tests.c
-regression_tests_LDADD = $(progs_ldadd)
-
-TEST_PROGS += keyhash
-keyhash_SOURCES = keyhash.c \
- $(top_srcdir)/gtk/gtkkeyhash.c \
- $(top_srcdir)/gtk/gtkkeyhash.h \
- $(top_srcdir)/gtk/gtkresources.c \
- $(top_srcdir)/gtk/gtkresources.h \
- $(top_srcdir)/gtk/gtkprivate.c \
- $(top_srcdir)/gtk/gtkprivate.h
-keyhash_LDADD = $(progs_ldadd)
-keyhash_CFLAGS = -DGTK_COMPILATION \
- -DGTK_LIBDIR=\"$(libdir)\" \
- -DGTK_DATADIR=\"$(datadir)\" \
- -DGTK_DATA_PREFIX=\"$(prefix)\" \
- -DGTK_SYSCONFDIR=\"$(sysconfdir)\"
-
-TEST_PROGS += gtkmenu
-gtkmenu_SOURCES = gtkmenu.c
-gtkmenu_LDADD = $(progs_ldadd)
-
-
-TEST_PROGS += objects-finalize
-objects_finalize_SOURCES = objects-finalize.c
-objects_finalize_LDADD = $(progs_ldadd)
-
-TEST_PROGS += window
-window_SOURCES = window.c
-window_LDADD = $(progs_ldadd)
-
-EXTRA_DIST += \
- file-chooser-test-dir/empty \
- file-chooser-test-dir/text.txt
-
--include $(top_srcdir)/git.mk
diff --git a/gtk/tests/accel.c b/gtk/tests/accel.c
deleted file mode 100644
index d7ceb94f0e..0000000000
--- a/gtk/tests/accel.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* accel.c - test accel parsing
- * Copyright (C) 2011 Bastien Nocera <hadess@hadess.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <gtk/gtk.h>
-#include <locale.h>
-
-static void
-test_one_accel (const char *accel,
- const char *exp_label,
- gboolean has_keysym)
-{
- guint accel_key;
- GdkModifierType mods;
- guint *keycodes;
- char *label, *name;
-
- accel_key = 0;
- gtk_accelerator_parse_with_keycode (accel,
- &accel_key,
- &keycodes,
- &mods);
-
- if (has_keysym)
- {
- guint accel_key_2;
- GdkModifierType mods_2;
-
- gtk_accelerator_parse (accel,
- &accel_key_2,
- &mods_2);
- g_assert (accel_key == accel_key_2);
- g_assert (mods == mods_2);
- }
-
- if (has_keysym)
- g_assert (accel_key != 0);
- g_assert (keycodes);
- g_assert (keycodes[0] != 0);
-
- label = gtk_accelerator_get_label_with_keycode (NULL,
- accel_key,
- *keycodes,
- mods);
-
- g_assert_cmpstr (label, ==, exp_label);
-
- name = gtk_accelerator_name_with_keycode (NULL,
- accel_key,
- *keycodes,
- mods);
- g_assert_cmpstr (name, ==, accel);
-
- g_free (keycodes);
- g_free (label);
- g_free (name);
-}
-
-static void
-accel1 (void)
-{
- test_one_accel ("0xb3", "0xb3", FALSE);
-}
-
-static void
-accel2 (void)
-{
- test_one_accel ("<Primary><Alt>z", "Ctrl+Alt+Z", TRUE);
-}
-
-static void
-accel3 (void)
-{
- test_one_accel ("KP_7", "7", TRUE);
-}
-
-static void
-accel4 (void)
-{
- test_one_accel ("<Primary>KP_7", "Ctrl+7", TRUE);
-}
-
-static void
-accel5 (void)
-{
- test_one_accel ("<Shift>exclam", "Shift+!", TRUE);
-}
-
-static void
-keysyms (void)
-{
- g_assert (gdk_keyval_from_name ("KP_7") == GDK_KEY_KP_7);
-}
-
-int
-main (int argc,
- char *argv[])
-{
- setlocale (LC_ALL, "en_GB.UTF-8");
-
- gtk_test_init (&argc, &argv);
-
- g_test_add_func ("/keysyms", keysyms);
-
- g_test_add_func ("/accel1", accel1);
- g_test_add_func ("/accel2", accel2);
- g_test_add_func ("/accel3", accel3);
- g_test_add_func ("/accel4", accel4);
- g_test_add_func ("/accel5", accel5);
- return g_test_run();
-}
diff --git a/gtk/tests/accessible.c b/gtk/tests/accessible.c
deleted file mode 100644
index 03668c32ae..0000000000
--- a/gtk/tests/accessible.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <gtk/gtk.h>
-
-static void
-test_type (GType t)
-{
- GtkWidget *w;
- AtkObject *a;
-
- if (g_type_is_a (t, GTK_TYPE_WIDGET))
- {
- w = (GtkWidget *)g_object_new (t, NULL);
- a = gtk_widget_get_accessible (w);
-
- g_assert (GTK_IS_ACCESSIBLE (a));
- g_assert (gtk_accessible_get_widget (GTK_ACCESSIBLE (a)) == w);
-
- g_object_unref (w);
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- const GType *tp;
- guint i, n;
-
- gtk_init (&argc, &argv);
-
- tp = gtk_test_list_all_types (&n);
-
- for (i = 0; i < n; n++)
- test_type (tp[i]);
-
- return 0;
-}
diff --git a/gtk/tests/action.c b/gtk/tests/action.c
deleted file mode 100644
index df8c44523a..0000000000
--- a/gtk/tests/action.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* GtkAction tests.
- *
- * Authors: Jan Arne Petersen <jpetersen@openismus.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-/* Fixture */
-
-typedef struct
-{
- GtkAction *action;
-} ActionTest;
-
-static void
-action_test_setup (ActionTest *fixture,
- gconstpointer test_data)
-{
- fixture->action = gtk_action_new ("name", "label", NULL, NULL);
-}
-
-static void
-action_test_teardown (ActionTest *fixture,
- gconstpointer test_data)
-{
- g_object_unref (fixture->action);
-}
-
-static void
-notify_count_emmisions (GObject *object,
- GParamSpec *pspec,
- gpointer data)
-{
- unsigned int *i = data;
- (*i)++;
-}
-
-static void
-menu_item_label_notify_count (ActionTest *fixture,
- gconstpointer test_data)
-{
- GtkWidget *item = gtk_menu_item_new ();
- unsigned int emmisions = 0;
-
- g_object_ref_sink (item);
- g_signal_connect (item, "notify::label",
- G_CALLBACK (notify_count_emmisions), &emmisions);
-
- gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (item),
- fixture->action);
-
- g_assert_cmpuint (emmisions, ==, 1);
-
- gtk_action_set_label (fixture->action, "new label");
-
- g_assert_cmpuint (emmisions, ==, 2);
-
- g_object_unref (item);
-}
-
-/* main */
-
-int
-main (int argc,
- char **argv)
-{
- gtk_test_init (&argc, &argv, NULL);
-
- g_test_add ("/Action/MenuItem/label-notify-count",
- ActionTest, NULL,
- action_test_setup,
- menu_item_label_notify_count,
- action_test_teardown);
-
- return g_test_run ();
-}
-
diff --git a/gtk/tests/bitmask.c b/gtk/tests/bitmask.c
deleted file mode 100644
index 7d186a986a..0000000000
--- a/gtk/tests/bitmask.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/* GtkRBTree tests.
- *
- * Copyright (C) 2011, Red Hat, Inc.
- * Authors: Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <locale.h>
-
-#include "../../gtk/gtkbitmaskprivate.h"
-
-#include <string.h>
-
-/* how often we run the random tests */
-#define N_RUNS 20
-
-/* how many tries we do in our random tests */
-#define N_TRIES 100
-
-/* the maximum index we use for bitmask values */
-#define MAX_INDEX 1000
-
-/* UTILITIES */
-
-static GtkBitmask *
-gtk_bitmask_new_parse (const char *string)
-{
- guint i, length;
- GtkBitmask *mask;
-
- length = strlen (string);
- mask = _gtk_bitmask_new ();
-
- for (i = 0; i < length; i++)
- {
- if (string[i] == '0')
- mask = _gtk_bitmask_set (mask, length - i - 1, FALSE);
- else if (string[i] == '1')
- mask = _gtk_bitmask_set (mask, length - i - 1, TRUE);
- else
- g_assert_not_reached ();
- }
-
- return mask;
-}
-
-#define assert_cmpmasks(mask,other) G_STMT_START { \
- if (G_UNLIKELY (!_gtk_bitmask_equals (mask, other))) \
- { \
- char *mask_string = _gtk_bitmask_to_string (mask); \
- char *other_string = _gtk_bitmask_to_string (other); \
- char *msg = g_strdup_printf ("%s (%s) != %s (%s)", \
- G_STRINGIFY (mask), mask_string, \
- G_STRINGIFY (other), other_string); \
- g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); \
- g_free (msg); \
- g_free (mask_string); \
- g_free (other_string); \
- } \
-}G_STMT_END
-
-static const char *tests[] = {
- "0",
- "1",
- "1000000000000000000000000000000",
- "10000000000000000000000000000000",
- "100000000000000000000000000000000000000000000000000000000000000",
- "1000000000000000000000000000000000000000000000000000000000000000",
- "10000000000000000000000000000000000000000000000000000000000000000",
- "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
- "1000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000",
- "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
-};
-
-static GtkBitmask *masks[G_N_ELEMENTS (tests)];
-
-/* TEST */
-
-static void
-test_to_string (void)
-{
- guint i;
- char *to_string;
-
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
- {
- to_string = _gtk_bitmask_to_string (masks[i]);
- g_assert_cmpstr (to_string, ==, tests[i]);
- g_free (to_string);
- }
-}
-
-static void
-test_is_empty (void)
-{
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
- {
- g_assert_cmpint (_gtk_bitmask_is_empty (masks[i]), ==, i == 0);
- }
-}
-
-static void
-test_equals (void)
-{
- guint i, j;
-
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
- {
- for (j = 0; j < G_N_ELEMENTS (tests); j++)
- {
- g_assert_cmpint (_gtk_bitmask_equals (masks[i], masks[j]), ==, i == j);
- }
- }
-}
-
-static void
-test_set (void)
-{
- guint i, j;
- guint indexes[N_TRIES];
- GtkBitmask *copy;
- const GtkBitmask *mask;
-
- for (i = 0; i < N_RUNS; i++)
- {
- mask = masks[g_test_rand_int_range (0, G_N_ELEMENTS (tests))];
- copy = _gtk_bitmask_copy (mask);
-
- for (j = 0; j < N_TRIES; j++)
- {
- indexes[j] = g_test_rand_int_range (0, MAX_INDEX);
- copy = _gtk_bitmask_set (copy, indexes[j], g_test_rand_bit ());
- }
-
- for (j = 0; j < N_TRIES; j++)
- {
- copy = _gtk_bitmask_set (copy, indexes[j], _gtk_bitmask_get (mask, indexes[j]));
- }
-
- assert_cmpmasks (copy, mask);
- _gtk_bitmask_free (copy);
- }
-}
-
-static void
-test_union (void)
-{
- GtkBitmask *left, *right, *expected;
- guint run, try, n_tries;
-
- for (run = 0; run < N_RUNS; run++)
- {
- left = _gtk_bitmask_new ();
- right = _gtk_bitmask_new ();
- expected = _gtk_bitmask_new ();
-
- n_tries = g_test_perf () ? N_TRIES : g_test_rand_int_range (0, N_TRIES);
- for (try = 0; try < n_tries; try++)
- {
- guint id = g_test_rand_int_range (0, MAX_INDEX);
-
- if (g_test_rand_bit ())
- left = _gtk_bitmask_set (left, id, TRUE);
- else
- right = _gtk_bitmask_set (right, id, TRUE);
-
- expected = _gtk_bitmask_set (expected, id, TRUE);
- }
-
- left = _gtk_bitmask_union (left, right);
- right = _gtk_bitmask_union (right, left);
-
- assert_cmpmasks (left, expected);
- assert_cmpmasks (right, expected);
- _gtk_bitmask_free (left);
- _gtk_bitmask_free (right);
- _gtk_bitmask_free (expected);
- }
-}
-
-static void
-test_intersect (void)
-{
- GtkBitmask *left, *right, *expected;
- guint run, try;
- gboolean intersects;
-
- for (run = 0; run < N_RUNS; run++)
- {
- left = _gtk_bitmask_new ();
- right = _gtk_bitmask_new ();
- expected = _gtk_bitmask_new ();
-
- for (try = 0; try < N_TRIES; try++)
- {
- guint id = g_test_rand_int_range (0, MAX_INDEX);
- gboolean set = g_test_rand_bit ();
-
- if (g_test_rand_bit ())
- {
- left = _gtk_bitmask_set (left, id, set);
- expected = _gtk_bitmask_set (expected, id, set ? _gtk_bitmask_get (right, id) : 0);
- }
- else
- {
- right = _gtk_bitmask_set (right, id, set);
- expected = _gtk_bitmask_set (expected, id, set ? _gtk_bitmask_get (left, id) : 0);
- }
- }
-
- intersects = _gtk_bitmask_intersects (left, right);
- g_assert_cmpint (intersects, ==, _gtk_bitmask_intersects (right, left));
- g_assert_cmpint (intersects, !=, _gtk_bitmask_is_empty (expected));
-
- left = _gtk_bitmask_intersect (left, right);
- right = _gtk_bitmask_intersect (right, left);
-
- assert_cmpmasks (left, expected);
- assert_cmpmasks (right, expected);
- _gtk_bitmask_free (left);
- _gtk_bitmask_free (right);
- _gtk_bitmask_free (expected);
- }
-}
-
-static void
-test_intersect_hardcoded (void)
-{
- GtkBitmask *left, *right, *intersection, *expected;
- const char *left_str, *right_str;
- guint left_len, right_len;
- guint i, l, r;
-
- for (l = 0; l < G_N_ELEMENTS (tests); l++)
- {
- for (r = 0; r < G_N_ELEMENTS (tests); r++)
- {
- left = masks[l];
- right = masks[r];
- left_str = tests[l];
- right_str = tests[r];
- left_len = strlen (tests[l]);
- right_len = strlen (tests[r]);
-
- expected = _gtk_bitmask_new ();
- if (left_len > right_len)
- left_str += left_len - right_len;
- if (right_len > left_len)
- right_str += right_len - left_len;
- i = MIN (right_len, left_len);
- while (i--)
- {
- expected = _gtk_bitmask_set (expected, i, left_str[0] == '1' && right_str[0] == '1');
- right_str++;
- left_str++;
- }
-
- intersection = _gtk_bitmask_intersect (_gtk_bitmask_copy (left), right);
-
- assert_cmpmasks (intersection, expected);
- g_assert_cmpint (_gtk_bitmask_is_empty (expected), ==, !_gtk_bitmask_intersects (left, right));
-
- _gtk_bitmask_free (intersection);
- _gtk_bitmask_free (expected);
- }
- }
-}
-
-#define SWAP(_a, _b) G_STMT_START{ \
- guint _tmp = _a; \
- _a = _b; \
- _b = _tmp; \
-}G_STMT_END
-
-static void
-test_invert_range (void)
-{
- GtkBitmask *left, *right, *intersection, *expected;
- guint run;
- guint left_start, left_end, right_start, right_end, start, end;
-
- for (run = 0; run < N_RUNS; run++)
- {
- left = _gtk_bitmask_new ();
- right = _gtk_bitmask_new ();
- expected = _gtk_bitmask_new ();
-
- left_start = g_test_rand_int_range (0, MAX_INDEX);
- left_end = g_test_rand_int_range (0, MAX_INDEX);
- if (left_start > left_end)
- SWAP (left_start, left_end);
- right_start = g_test_rand_int_range (0, MAX_INDEX);
- right_end = g_test_rand_int_range (0, MAX_INDEX);
- if (right_start > right_end)
- SWAP (right_start, right_end);
- start = MAX (left_start, right_start);
- end = MIN (left_end, right_end);
-
- if (left_start != left_end)
- left = _gtk_bitmask_invert_range (left, left_start, left_end);
- if (right_start != right_end)
- right = _gtk_bitmask_invert_range (right, right_start, right_end);
- if (start < end)
- expected = _gtk_bitmask_invert_range (expected, start, end);
-
- intersection = _gtk_bitmask_copy (left);
- intersection = _gtk_bitmask_intersect (intersection, right);
-
- assert_cmpmasks (intersection, expected);
-
- if (start < end)
- expected = _gtk_bitmask_invert_range (expected, start, end);
-
- g_assert_cmpint (_gtk_bitmask_is_empty (expected), ==, TRUE);
-
- _gtk_bitmask_free (left);
- _gtk_bitmask_free (right);
- _gtk_bitmask_free (intersection);
- _gtk_bitmask_free (expected);
- }
-}
-
-/* SETUP & RUNNING */
-
-static void
-create_masks (void)
-{
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
- masks[i] = gtk_bitmask_new_parse (tests[i]);
-}
-
-static void
-free_masks (void)
-{
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
- {
- _gtk_bitmask_free (masks[i]);
- masks[i] = NULL;
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- int result;
-
- g_test_init (&argc, &argv, NULL);
- setlocale (LC_ALL, "C");
- g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=%s");
-
- create_masks ();
-
- g_test_add_func ("/bitmask/to_string", test_to_string);
- g_test_add_func ("/bitmask/is_empty", test_is_empty);
- g_test_add_func ("/bitmask/equals", test_equals);
- g_test_add_func ("/bitmask/set", test_set);
- g_test_add_func ("/bitmask/union", test_union);
- g_test_add_func ("/bitmask/intersect", test_intersect);
- g_test_add_func ("/bitmask/intersect_hardcoded", test_intersect_hardcoded);
- g_test_add_func ("/bitmask/invert_range", test_invert_range);
-
- result = g_test_run ();
-
- free_masks ();
-
- return result;
-}
diff --git a/gtk/tests/builder.c b/gtk/tests/builder.c
deleted file mode 100644
index e924a9a61b..0000000000
--- a/gtk/tests/builder.c
+++ /dev/null
@@ -1,2776 +0,0 @@
-/* buildertest.c
- * Copyright (C) 2006-2007 Async Open Source
- * Authors: Johan Dahlin
- * Henrique Romano
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <string.h>
-#include <libintl.h>
-#include <locale.h>
-#include <math.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-/* exported for GtkBuilder */
-void signal_normal (GtkWindow *window, GParamSpec spec);
-void signal_after (GtkWindow *window, GParamSpec spec);
-void signal_object (GtkButton *button, GParamSpec spec);
-void signal_object_after (GtkButton *button, GParamSpec spec);
-void signal_first (GtkButton *button, GParamSpec spec);
-void signal_second (GtkButton *button, GParamSpec spec);
-void signal_extra (GtkButton *button, GParamSpec spec);
-void signal_extra2 (GtkButton *button, GParamSpec spec);
-
-/* Copied from gtkiconfactory.c; keep in sync! */
-struct _GtkIconSet
-{
- guint ref_count;
- GSList *sources;
- GSList *cache;
- guint cache_size;
- guint cache_serial;
-};
-
-
-static GtkBuilder *
-builder_new_from_string (const gchar *buffer,
- gsize length,
- const gchar *domain)
-{
- GtkBuilder *builder;
- GError *error = NULL;
-
- builder = gtk_builder_new ();
- if (domain)
- gtk_builder_set_translation_domain (builder, domain);
- gtk_builder_add_from_string (builder, buffer, length, &error);
- if (error)
- {
- g_print ("ERROR: %s", error->message);
- g_error_free (error);
- }
-
- return builder;
-}
-
-static void
-test_parser (void)
-{
- GtkBuilder *builder;
- GError *error;
-
- builder = gtk_builder_new ();
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<xxx/>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_UNHANDLED_TAG));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<interface invalid=\"X\"/>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_ATTRIBUTE));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<interface><child/></interface>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_TAG));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<interface><object class=\"GtkVBox\" id=\"a\"><object class=\"GtkHBox\" id=\"b\"/></object></interface>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_TAG));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<interface><object class=\"Unknown\" id=\"a\"></object></interface>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<interface><object class=\"GtkWidget\" id=\"a\" constructor=\"none\"></object></interface>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<interface><object class=\"GtkButton\" id=\"a\"><child internal-child=\"foobar\"><object class=\"GtkButton\" id=\"int\"/></child></object></interface>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, "<interface><object class=\"GtkButton\" id=\"a\"></object><object class=\"GtkButton\" id=\"a\"/></object></interface>", -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_DUPLICATE_ID));
- g_error_free (error);
-
- g_object_unref (builder);
-}
-
-static int normal = 0;
-static int after = 0;
-static int object = 0;
-static int object_after = 0;
-
-void /* exported for GtkBuilder */
-signal_normal (GtkWindow *window, GParamSpec spec)
-{
- g_assert (GTK_IS_WINDOW (window));
- g_assert (normal == 0);
- g_assert (after == 0);
-
- normal++;
-}
-
-void /* exported for GtkBuilder */
-signal_after (GtkWindow *window, GParamSpec spec)
-{
- g_assert (GTK_IS_WINDOW (window));
- g_assert (normal == 1);
- g_assert (after == 0);
-
- after++;
-}
-
-void /* exported for GtkBuilder */
-signal_object (GtkButton *button, GParamSpec spec)
-{
- g_assert (GTK_IS_BUTTON (button));
- g_assert (object == 0);
- g_assert (object_after == 0);
-
- object++;
-}
-
-void /* exported for GtkBuilder */
-signal_object_after (GtkButton *button, GParamSpec spec)
-{
- g_assert (GTK_IS_BUTTON (button));
- g_assert (object == 1);
- g_assert (object_after == 0);
-
- object_after++;
-}
-
-void /* exported for GtkBuilder */
-signal_first (GtkButton *button, GParamSpec spec)
-{
- g_assert (normal == 0);
- normal = 10;
-}
-
-void /* exported for GtkBuilder */
-signal_second (GtkButton *button, GParamSpec spec)
-{
- g_assert (normal == 10);
- normal = 20;
-}
-
-void /* exported for GtkBuilder */
-signal_extra (GtkButton *button, GParamSpec spec)
-{
- g_assert (normal == 20);
- normal = 30;
-}
-
-void /* exported for GtkBuilder */
-signal_extra2 (GtkButton *button, GParamSpec spec)
-{
- g_assert (normal == 30);
- normal = 40;
-}
-
-static void
-test_connect_signals (void)
-{
- GtkBuilder *builder;
- GObject *window;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkButton\" id=\"button\"/>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <signal name=\"notify::title\" handler=\"signal_normal\"/>"
- " <signal name=\"notify::title\" handler=\"signal_after\" after=\"yes\"/>"
- " <signal name=\"notify::title\" handler=\"signal_object\""
- " object=\"button\"/>"
- " <signal name=\"notify::title\" handler=\"signal_object_after\""
- " object=\"button\" after=\"yes\"/>"
- " </object>"
- "</interface>";
- const gchar buffer_order[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <signal name=\"notify::title\" handler=\"signal_first\"/>"
- " <signal name=\"notify::title\" handler=\"signal_second\"/>"
- " </object>"
- "</interface>";
- const gchar buffer_extra[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window2\">"
- " <signal name=\"notify::title\" handler=\"signal_extra\"/>"
- " </object>"
- "</interface>";
- const gchar buffer_extra2[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window3\">"
- " <signal name=\"notify::title\" handler=\"signal_extra2\"/>"
- " </object>"
- "</interface>";
- const gchar buffer_after_child[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkButton\" id=\"button1\"/>"
- " </child>"
- " <signal name=\"notify::title\" handler=\"signal_normal\"/>"
- " </object>"
- "</interface>";
-
- builder = builder_new_from_string (buffer, -1, NULL);
- gtk_builder_connect_signals (builder, NULL);
-
- window = gtk_builder_get_object (builder, "window1");
- gtk_window_set_title (GTK_WINDOW (window), "test");
-
- g_assert_cmpint (normal, ==, 1);
- g_assert_cmpint (after, ==, 1);
- g_assert_cmpint (object, ==, 1);
- g_assert_cmpint (object_after, ==, 1);
-
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer_order, -1, NULL);
- gtk_builder_connect_signals (builder, NULL);
- window = gtk_builder_get_object (builder, "window1");
- normal = 0;
- gtk_window_set_title (GTK_WINDOW (window), "test");
- g_assert (normal == 20);
-
- gtk_widget_destroy (GTK_WIDGET (window));
-
- gtk_builder_add_from_string (builder, buffer_extra,
- strlen (buffer_extra), NULL);
- gtk_builder_add_from_string (builder, buffer_extra2,
- strlen (buffer_extra2), NULL);
- gtk_builder_connect_signals (builder, NULL);
- window = gtk_builder_get_object (builder, "window2");
- gtk_window_set_title (GTK_WINDOW (window), "test");
- g_assert (normal == 30);
-
- gtk_widget_destroy (GTK_WIDGET (window));
- window = gtk_builder_get_object (builder, "window3");
- gtk_window_set_title (GTK_WINDOW (window), "test");
- g_assert (normal == 40);
- gtk_widget_destroy (GTK_WIDGET (window));
-
- g_object_unref (builder);
-
- /* new test, reset globals */
- after = 0;
- normal = 0;
-
- builder = builder_new_from_string (buffer_after_child, -1, NULL);
- window = gtk_builder_get_object (builder, "window1");
- gtk_builder_connect_signals (builder, NULL);
- gtk_window_set_title (GTK_WINDOW (window), "test");
-
- g_assert (normal == 1);
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-}
-
-static void
-test_uimanager_simple (void)
-{
- GtkBuilder *builder;
- GObject *window, *uimgr, *menubar;
- GObject *menu, *label;
- GList *children;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkUIManager\" id=\"uimgr1\"/>"
- "</interface>";
-
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkUIManager\" id=\"uimgr1\">"
- " <child>"
- " <object class=\"GtkActionGroup\" id=\"ag1\">"
- " <child>"
- " <object class=\"GtkAction\" id=\"file\">"
- " <property name=\"label\">_File</property>"
- " </object>"
- " <accelerator key=\"n\" modifiers=\"GDK_CONTROL_MASK\"/>"
- " </child>"
- " </object>"
- " </child>"
- " <ui>"
- " <menubar name=\"menubar1\">"
- " <menu action=\"file\">"
- " </menu>"
- " </menubar>"
- " </ui>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkMenuBar\" id=\"menubar1\" constructor=\"uimgr1\"/>"
- " </child>"
- " </object>"
- "</interface>";
-
- builder = builder_new_from_string (buffer, -1, NULL);
-
- uimgr = gtk_builder_get_object (builder, "uimgr1");
- g_assert (GTK_IS_UI_MANAGER (uimgr));
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
-
- menubar = gtk_builder_get_object (builder, "menubar1");
- g_assert (GTK_IS_MENU_BAR (menubar));
-
- children = gtk_container_get_children (GTK_CONTAINER (menubar));
- menu = children->data;
- g_assert (GTK_IS_MENU_ITEM (menu));
- g_assert (strcmp (gtk_widget_get_name (GTK_WIDGET (menu)), "file") == 0);
- g_list_free (children);
-
- label = G_OBJECT (gtk_bin_get_child (GTK_BIN (menu)));
- g_assert (GTK_IS_LABEL (label));
- g_assert (strcmp (gtk_label_get_text (GTK_LABEL (label)), "File") == 0);
-
- window = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-}
-
-static void
-test_domain (void)
-{
- GtkBuilder *builder;
- const gchar buffer1[] = "<interface/>";
- const gchar buffer2[] = "<interface domain=\"domain\"/>";
- const gchar *domain;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- domain = gtk_builder_get_translation_domain (builder);
- g_assert (domain == NULL);
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer1, -1, "domain-1");
- domain = gtk_builder_get_translation_domain (builder);
- g_assert (domain);
- g_assert (strcmp (domain, "domain-1") == 0);
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- domain = gtk_builder_get_translation_domain (builder);
- g_assert (domain == NULL);
- g_object_unref (builder);
-}
-
-#if 0
-static void
-test_translation (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label\">"
- " <property name=\"label\" translatable=\"yes\">File</property>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GtkLabel *window, *label;
-
- setlocale (LC_ALL, "sv_SE");
- textdomain ("builder");
- bindtextdomain ("builder", "tests");
-
- builder = builder_new_from_string (buffer, -1, NULL);
- label = GTK_LABEL (gtk_builder_get_object (builder, "label"));
- g_assert (strcmp (gtk_label_get_text (label), "Arkiv") == 0);
-
- window = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-}
-#endif
-
-static void
-test_sizegroup (void)
-{
- GtkBuilder * builder;
- const gchar buffer1[] =
- "<interface domain=\"test\">"
- " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">"
- " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
- " <widgets>"
- " <widget name=\"radio1\"/>"
- " <widget name=\"radio2\"/>"
- " </widgets>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkVBox\" id=\"vbox1\">"
- " <child>"
- " <object class=\"GtkRadioButton\" id=\"radio1\"/>"
- " </child>"
- " <child>"
- " <object class=\"GtkRadioButton\" id=\"radio2\"/>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- const gchar buffer2[] =
- "<interface domain=\"test\">"
- " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">"
- " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
- " <widgets>"
- " </widgets>"
- " </object>"
- "</interface>";
- const gchar buffer3[] =
- "<interface domain=\"test\">"
- " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">"
- " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
- " <widgets>"
- " <widget name=\"radio1\"/>"
- " <widget name=\"radio2\"/>"
- " </widgets>"
- " </object>"
- " <object class=\"GtkSizeGroup\" id=\"sizegroup2\">"
- " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
- " <widgets>"
- " <widget name=\"radio1\"/>"
- " <widget name=\"radio2\"/>"
- " </widgets>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkVBox\" id=\"vbox1\">"
- " <child>"
- " <object class=\"GtkRadioButton\" id=\"radio1\"/>"
- " </child>"
- " <child>"
- " <object class=\"GtkRadioButton\" id=\"radio2\"/>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *sizegroup;
- GSList *widgets;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- sizegroup = gtk_builder_get_object (builder, "sizegroup1");
- widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
- g_assert (g_slist_length (widgets) == 2);
- g_slist_free (widgets);
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- sizegroup = gtk_builder_get_object (builder, "sizegroup1");
- widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
- g_assert (g_slist_length (widgets) == 0);
- g_slist_free (widgets);
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer3, -1, NULL);
- sizegroup = gtk_builder_get_object (builder, "sizegroup1");
- widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
- g_assert (g_slist_length (widgets) == 2);
- g_slist_free (widgets);
- sizegroup = gtk_builder_get_object (builder, "sizegroup2");
- widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
- g_assert (g_slist_length (widgets) == 2);
- g_slist_free (widgets);
-
-#if 0
- {
- GObject *window;
- window = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window));
- }
-#endif
- g_object_unref (builder);
-}
-
-static void
-test_list_store (void)
-{
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkListStore\" id=\"liststore1\">"
- " <columns>"
- " <column type=\"gchararray\"/>"
- " <column type=\"guint\"/>"
- " </columns>"
- " </object>"
- "</interface>";
- const char buffer2[] =
- "<interface>"
- " <object class=\"GtkListStore\" id=\"liststore1\">"
- " <columns>"
- " <column type=\"gchararray\"/>"
- " <column type=\"gchararray\"/>"
- " <column type=\"gint\"/>"
- " </columns>"
- " <data>"
- " <row>"
- " <col id=\"0\" translatable=\"yes\">John</col>"
- " <col id=\"1\" context=\"foo\">Doe</col>"
- " <col id=\"2\" comment=\"foobar\">25</col>"
- " </row>"
- " <row>"
- " <col id=\"0\">Johan</col>"
- " <col id=\"1\">Dole</col>"
- " <col id=\"2\">50</col>"
- " </row>"
- " </data>"
- " </object>"
- "</interface>";
- const char buffer3[] =
- "<interface>"
- " <object class=\"GtkListStore\" id=\"liststore1\">"
- " <columns>"
- " <column type=\"gchararray\"/>"
- " <column type=\"gchararray\"/>"
- " <column type=\"gint\"/>"
- " </columns>"
- " <data>"
- " <row>"
- " <col id=\"1\" context=\"foo\">Doe</col>"
- " <col id=\"0\" translatable=\"yes\">John</col>"
- " <col id=\"2\" comment=\"foobar\">25</col>"
- " </row>"
- " <row>"
- " <col id=\"2\">50</col>"
- " <col id=\"1\">Dole</col>"
- " <col id=\"0\">Johan</col>"
- " </row>"
- " <row>"
- " <col id=\"2\">19</col>"
- " </row>"
- " </data>"
- " </object>"
- "</interface>";
- GtkBuilder *builder;
- GObject *store;
- GtkTreeIter iter;
- gchar *surname, *lastname;
- int age;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- store = gtk_builder_get_object (builder, "liststore1");
- g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT);
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- store = gtk_builder_get_object (builder, "liststore1");
- g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT);
-
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE);
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- 0, &surname,
- 1, &lastname,
- 2, &age,
- -1);
- g_assert (surname != NULL);
- g_assert (strcmp (surname, "John") == 0);
- g_free (surname);
- g_assert (lastname != NULL);
- g_assert (strcmp (lastname, "Doe") == 0);
- g_free (lastname);
- g_assert (age == 25);
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE);
-
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- 0, &surname,
- 1, &lastname,
- 2, &age,
- -1);
- g_assert (surname != NULL);
- g_assert (strcmp (surname, "Johan") == 0);
- g_free (surname);
- g_assert (lastname != NULL);
- g_assert (strcmp (lastname, "Dole") == 0);
- g_free (lastname);
- g_assert (age == 50);
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE);
-
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer3, -1, NULL);
- store = gtk_builder_get_object (builder, "liststore1");
- g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT);
-
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE);
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- 0, &surname,
- 1, &lastname,
- 2, &age,
- -1);
- g_assert (surname != NULL);
- g_assert (strcmp (surname, "John") == 0);
- g_free (surname);
- g_assert (lastname != NULL);
- g_assert (strcmp (lastname, "Doe") == 0);
- g_free (lastname);
- g_assert (age == 25);
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE);
-
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- 0, &surname,
- 1, &lastname,
- 2, &age,
- -1);
- g_assert (surname != NULL);
- g_assert (strcmp (surname, "Johan") == 0);
- g_free (surname);
- g_assert (lastname != NULL);
- g_assert (strcmp (lastname, "Dole") == 0);
- g_free (lastname);
- g_assert (age == 50);
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE);
-
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- 0, &surname,
- 1, &lastname,
- 2, &age,
- -1);
- g_assert (surname == NULL);
- g_assert (lastname == NULL);
- g_assert (age == 19);
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE);
-
- g_object_unref (builder);
-}
-
-static void
-test_tree_store (void)
-{
- const gchar buffer[] =
- "<interface domain=\"test\">"
- " <object class=\"GtkTreeStore\" id=\"treestore1\">"
- " <columns>"
- " <column type=\"gchararray\"/>"
- " <column type=\"guint\"/>"
- " </columns>"
- " </object>"
- "</interface>";
- GtkBuilder *builder;
- GObject *store;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- store = gtk_builder_get_object (builder, "treestore1");
- g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING);
- g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT);
-
- g_object_unref (builder);
-}
-
-static void
-test_types (void)
-{
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkAction\" id=\"action\"/>"
- " <object class=\"GtkActionGroup\" id=\"actiongroup\"/>"
- " <object class=\"GtkAlignment\" id=\"alignment\"/>"
- " <object class=\"GtkArrow\" id=\"arrow\"/>"
- " <object class=\"GtkButton\" id=\"button\"/>"
- " <object class=\"GtkCheckButton\" id=\"checkbutton\"/>"
- " <object class=\"GtkDialog\" id=\"dialog\"/>"
- " <object class=\"GtkDrawingArea\" id=\"drawingarea\"/>"
- " <object class=\"GtkEventBox\" id=\"eventbox\"/>"
- " <object class=\"GtkEntry\" id=\"entry\"/>"
- " <object class=\"GtkFontButton\" id=\"fontbutton\"/>"
- " <object class=\"GtkHButtonBox\" id=\"hbuttonbox\"/>"
- " <object class=\"GtkHBox\" id=\"hbox\"/>"
- " <object class=\"GtkHPaned\" id=\"hpaned\"/>"
- " <object class=\"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=\"GtkVPaned\" id=\"vpaned\"/>"
- " <object class=\"GtkVScale\" id=\"vscale\"/>"
- " <object class=\"GtkWindow\" id=\"window\"/>"
- " <object class=\"GtkUIManager\" id=\"uimanager\"/>"
- "</interface>";
- const gchar buffer2[] =
- "<interface>"
- " <object type-func=\"gtk_window_get_type\" id=\"window\"/>"
- "</interface>";
- const gchar buffer3[] =
- "<interface>"
- " <object type-func=\"xxx_invalid_get_type_function\" id=\"window\"/>"
- "</interface>";
- GtkBuilder *builder;
- GObject *window;
- GError *error;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "dialog")));
- gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "window")));
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- window = gtk_builder_get_object (builder, "window");
- g_assert (GTK_IS_WINDOW (window));
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-
- error = NULL;
- builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, buffer3, -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION));
- g_error_free (error);
- g_object_unref (builder);
-}
-
-static void
-test_spin_button (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- "<object class=\"GtkAdjustment\" id=\"adjustment1\">"
- "<property name=\"lower\">0</property>"
- "<property name=\"upper\">10</property>"
- "<property name=\"step-increment\">2</property>"
- "<property name=\"page-increment\">3</property>"
- "<property name=\"page-size\">0</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 *obj;
- GtkAdjustment *adjustment;
- gdouble value;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- obj = gtk_builder_get_object (builder, "spinbutton1");
- g_assert (GTK_IS_SPIN_BUTTON (obj));
- adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (obj));
- g_assert (GTK_IS_ADJUSTMENT (adjustment));
- g_object_get (adjustment, "value", &value, NULL);
- g_assert (value == 1);
- g_object_get (adjustment, "lower", &value, NULL);
- g_assert (value == 0);
- g_object_get (adjustment, "upper", &value, NULL);
- g_assert (value == 10);
- g_object_get (adjustment, "step-increment", &value, NULL);
- g_assert (value == 2);
- g_object_get (adjustment, "page-increment", &value, NULL);
- g_assert (value == 3);
- g_object_get (adjustment, "page-size", &value, NULL);
- g_assert (value == 0);
-
- g_object_unref (builder);
-}
-
-static void
-test_notebook (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkNotebook\" id=\"notebook1\">"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label1\">"
- " <property name=\"label\">label1</property>"
- " </object>"
- " </child>"
- " <child type=\"tab\">"
- " <object class=\"GtkLabel\" id=\"tablabel1\">"
- " <property name=\"label\">tab_label1</property>"
- " </object>"
- " </child>"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label2\">"
- " <property name=\"label\">label2</property>"
- " </object>"
- " </child>"
- " <child type=\"tab\">"
- " <object class=\"GtkLabel\" id=\"tablabel2\">"
- " <property name=\"label\">tab_label2</property>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *notebook;
- GtkWidget *label;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- notebook = gtk_builder_get_object (builder, "notebook1");
- g_assert (notebook != NULL);
- g_assert (gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)) == 2);
-
- label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0);
- g_assert (GTK_IS_LABEL (label));
- g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "label1") == 0);
- label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label);
- g_assert (GTK_IS_LABEL (label));
- g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "tab_label1") == 0);
-
- label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1);
- g_assert (GTK_IS_LABEL (label));
- g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "label2") == 0);
- label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label);
- g_assert (GTK_IS_LABEL (label));
- g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "tab_label2") == 0);
-
- g_object_unref (builder);
-}
-
-static void
-test_construct_only_property (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <property name=\"type\">GTK_WINDOW_POPUP</property>"
- " </object>"
- "</interface>";
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkTextTagTable\" id=\"tagtable1\"/>"
- " <object class=\"GtkTextBuffer\" id=\"textbuffer1\">"
- " <property name=\"tag-table\">tagtable1</property>"
- " </object>"
- "</interface>";
- GObject *widget, *tagtable, *textbuffer;
- GtkWindowType type;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- widget = gtk_builder_get_object (builder, "window1");
- g_object_get (widget, "type", &type, NULL);
- g_assert (type == GTK_WINDOW_POPUP);
-
- gtk_widget_destroy (GTK_WIDGET (widget));
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- textbuffer = gtk_builder_get_object (builder, "textbuffer1");
- g_assert (textbuffer != NULL);
- g_object_get (textbuffer, "tag-table", &tagtable, NULL);
- g_assert (tagtable == gtk_builder_get_object (builder, "tagtable1"));
- g_object_unref (tagtable);
- g_object_unref (builder);
-}
-
-static void
-test_object_properties (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkVBox\" id=\"vbox\">"
- " <property name=\"border-width\">10</property>"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label1\">"
- " <property name=\"mnemonic-widget\">spinbutton1</property>"
- " </object>"
- " </child>"
- " <child>"
- " <object class=\"GtkSpinButton\" id=\"spinbutton1\"/>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window2\"/>"
- "</interface>";
- GObject *label, *spinbutton, *window;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- label = gtk_builder_get_object (builder, "label1");
- g_assert (label != NULL);
- spinbutton = gtk_builder_get_object (builder, "spinbutton1");
- g_assert (spinbutton != NULL);
- g_assert (spinbutton == (GObject*)gtk_label_get_mnemonic_widget (GTK_LABEL (label)));
-
- gtk_builder_add_from_string (builder, buffer2, -1, NULL);
- window = gtk_builder_get_object (builder, "window2");
- g_assert (window != NULL);
- gtk_widget_destroy (GTK_WIDGET (window));
-
- g_object_unref (builder);
-}
-
-static void
-test_children (void)
-{
- GtkBuilder * builder;
- GtkWidget *content_area, *dialog_action_area;
- GList *children;
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkButton\" id=\"button1\">"
- " <property name=\"label\">Hello</property>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkDialog\" id=\"dialog1\">"
- " <child internal-child=\"vbox\">"
- " <object class=\"GtkVBox\" id=\"dialog1-vbox\">"
- " <property name=\"border-width\">10</property>"
- " <child internal-child=\"action_area\">"
- " <object class=\"GtkHButtonBox\" id=\"dialog1-action_area\">"
- " <property name=\"border-width\">20</property>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
-
- GObject *window, *button;
- GObject *dialog, *vbox, *action_area;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- window = gtk_builder_get_object (builder, "window1");
- g_assert (window != NULL);
- g_assert (GTK_IS_WINDOW (window));
-
- button = gtk_builder_get_object (builder, "button1");
- g_assert (button != NULL);
- g_assert (GTK_IS_BUTTON (button));
- g_assert (gtk_widget_get_parent (GTK_WIDGET(button)) != NULL);
- g_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (gtk_widget_get_parent (GTK_WIDGET (button)))), "window1") == 0);
-
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- dialog = gtk_builder_get_object (builder, "dialog1");
- g_assert (dialog != NULL);
- g_assert (GTK_IS_DIALOG (dialog));
- children = gtk_container_get_children (GTK_CONTAINER (dialog));
- g_assert (g_list_length (children) == 1);
- g_list_free (children);
-
- vbox = gtk_builder_get_object (builder, "dialog1-vbox");
- content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
- g_assert (vbox != NULL);
- g_assert (GTK_IS_BOX (vbox));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (vbox)) == GTK_ORIENTATION_VERTICAL);
- g_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (gtk_widget_get_parent (GTK_WIDGET (vbox)))), "dialog1") == 0);
- g_assert (gtk_container_get_border_width (GTK_CONTAINER (vbox)) == 10);
- g_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (content_area)), "dialog1-vbox") == 0);
-
- action_area = gtk_builder_get_object (builder, "dialog1-action_area");
- dialog_action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
- g_assert (action_area != NULL);
- g_assert (GTK_IS_BUTTON_BOX (action_area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (action_area)) == GTK_ORIENTATION_HORIZONTAL);
- g_assert (gtk_widget_get_parent (GTK_WIDGET (action_area)) != NULL);
- g_assert (gtk_container_get_border_width (GTK_CONTAINER (action_area)) == 20);
- g_assert (dialog_action_area != NULL);
- g_assert (gtk_buildable_get_name (GTK_BUILDABLE (action_area)) != NULL);
- g_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (dialog_action_area)), "dialog1-action_area") == 0);
- gtk_widget_destroy (GTK_WIDGET (dialog));
- g_object_unref (builder);
-}
-
-static void
-test_child_properties (void)
-{
- GtkBuilder * builder;
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkBox\" id=\"vbox1\">"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label1\"/>"
- " <packing>"
- " <property name=\"pack-type\">start</property>"
- " </packing>"
- " </child>"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label2\"/>"
- " <packing>"
- " <property name=\"pack-type\">end</property>"
- " </packing>"
- " </child>"
- " </object>"
- "</interface>";
-
- GObject *label, *vbox;
- GtkPackType pack_type;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- vbox = gtk_builder_get_object (builder, "vbox1");
- g_assert (GTK_IS_BOX (vbox));
-
- label = gtk_builder_get_object (builder, "label1");
- g_assert (GTK_IS_LABEL (label));
- gtk_container_child_get (GTK_CONTAINER (vbox),
- GTK_WIDGET (label),
- "pack-type",
- &pack_type,
- NULL);
- g_assert (pack_type == GTK_PACK_START);
-
- label = gtk_builder_get_object (builder, "label2");
- g_assert (GTK_IS_LABEL (label));
- gtk_container_child_get (GTK_CONTAINER (vbox),
- GTK_WIDGET (label),
- "pack-type",
- &pack_type,
- NULL);
- g_assert (pack_type == GTK_PACK_END);
-
- g_object_unref (builder);
-}
-
-static void
-test_treeview_column (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- "<object class=\"GtkListStore\" id=\"liststore1\">"
- " <columns>"
- " <column type=\"gchararray\"/>"
- " <column type=\"guint\"/>"
- " </columns>"
- " <data>"
- " <row>"
- " <col id=\"0\">John</col>"
- " <col id=\"1\">25</col>"
- " </row>"
- " </data>"
- "</object>"
- "<object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkTreeView\" id=\"treeview1\">"
- " <property name=\"visible\">True</property>"
- " <property name=\"model\">liststore1</property>"
- " <child>"
- " <object class=\"GtkTreeViewColumn\" id=\"column1\">"
- " <property name=\"title\">Test</property>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
- " <attributes>"
- " <attribute name=\"text\">1</attribute>"
- " </attributes>"
- " </child>"
- " </object>"
- " </child>"
- " <child>"
- " <object class=\"GtkTreeViewColumn\" id=\"column2\">"
- " <property name=\"title\">Number</property>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>"
- " <attributes>"
- " <attribute name=\"text\">0</attribute>"
- " </attributes>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- "</object>"
- "</interface>";
- GObject *window, *treeview;
- GtkTreeViewColumn *column;
- GList *renderers;
- GObject *renderer;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- treeview = gtk_builder_get_object (builder, "treeview1");
- g_assert (treeview);
- g_assert (GTK_IS_TREE_VIEW (treeview));
- column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 0);
- g_assert (GTK_IS_TREE_VIEW_COLUMN (column));
- g_assert (strcmp (gtk_tree_view_column_get_title (column), "Test") == 0);
-
- renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
- g_assert (g_list_length (renderers) == 1);
- renderer = g_list_nth_data (renderers, 0);
- g_assert (renderer);
- g_assert (GTK_IS_CELL_RENDERER_TEXT (renderer));
- g_list_free (renderers);
-
- window = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window));
-
- g_object_unref (builder);
-}
-
-static void
-test_icon_view (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkListStore\" id=\"liststore1\">"
- " <columns>"
- " <column type=\"gchararray\"/>"
- " <column type=\"GdkPixbuf\"/>"
- " </columns>"
- " <data>"
- " <row>"
- " <col id=\"0\">test</col>"
- " </row>"
- " </data>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkIconView\" id=\"iconview1\">"
- " <property name=\"model\">liststore1</property>"
- " <property name=\"text-column\">0</property>"
- " <property name=\"pixbuf-column\">1</property>"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
- " <attributes>"
- " <attribute name=\"text\">0</attribute>"
- " </attributes>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *window, *iconview;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- iconview = gtk_builder_get_object (builder, "iconview1");
- g_assert (iconview);
- g_assert (GTK_IS_ICON_VIEW (iconview));
-
- window = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-}
-
-static void
-test_combo_box (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkListStore\" id=\"liststore1\">"
- " <columns>"
- " <column type=\"guint\"/>"
- " <column type=\"gchararray\"/>"
- " </columns>"
- " <data>"
- " <row>"
- " <col id=\"0\">1</col>"
- " <col id=\"1\">Foo</col>"
- " </row>"
- " <row>"
- " <col id=\"0\">2</col>"
- " <col id=\"1\">Bar</col>"
- " </row>"
- " </data>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkComboBox\" id=\"combobox1\">"
- " <property name=\"model\">liststore1</property>"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
- " <attributes>"
- " <attribute name=\"text\">0</attribute>"
- " </attributes>"
- " </child>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>"
- " <attributes>"
- " <attribute name=\"text\">1</attribute>"
- " </attributes>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *window, *combobox;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- combobox = gtk_builder_get_object (builder, "combobox1");
- g_assert (combobox);
-
- window = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window));
-
- g_object_unref (builder);
-}
-
-#if 0
-static void
-test_combo_box_entry (void)
-{
- GtkBuilder *builder;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkListStore\" id=\"liststore1\">"
- " <columns>"
- " <column type=\"guint\"/>"
- " <column type=\"gchararray\"/>"
- " </columns>"
- " <data>"
- " <row>"
- " <col id=\"0\">1</col>"
- " <col id=\"1\">Foo</col>"
- " </row>"
- " <row>"
- " <col id=\"0\">2</col>"
- " <col id=\"1\">Bar</col>"
- " </row>"
- " </data>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkComboBox\" id=\"comboboxentry1\">"
- " <property name=\"model\">liststore1</property>"
- " <property name=\"has-entry\">True</property>"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
- " <attributes>"
- " <attribute name=\"text\">0</attribute>"
- " </attributes>"
- " </child>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>"
- " <attributes>"
- " <attribute name=\"text\">1</attribute>"
- " </attributes>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *window, *combobox, *renderer;
- gchar *text;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- combobox = gtk_builder_get_object (builder, "comboboxentry1");
- g_assert (combobox);
-
- renderer = gtk_builder_get_object (builder, "renderer2");
- g_assert (renderer);
- g_object_get (renderer, "text", &text, NULL);
- g_assert (text);
- g_assert (strcmp (text, "Bar") == 0);
- g_free (text);
-
- renderer = gtk_builder_get_object (builder, "renderer1");
- g_assert (renderer);
- g_object_get (renderer, "text", &text, NULL);
- g_assert (text);
- g_assert (strcmp (text, "2") == 0);
- g_free (text);
-
- window = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window));
-
- g_object_unref (builder);
-}
-#endif
-
-static void
-test_cell_view (void)
-{
- GtkBuilder *builder;
- const 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>"
- " <accelerator key=\"f\" modifiers=\"GDK_CONTROL_MASK\" signal=\"grab_focus\"/>"
- " <child>"
- " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
- " <attributes>"
- " <attribute name=\"text\">0</attribute>"
- " </attributes>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *cellview;
- GObject *model, *window;
- GtkTreePath *path;
- GList *renderers;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- cellview = gtk_builder_get_object (builder, "cellview1");
- g_assert (builder);
- g_assert (cellview);
- g_assert (GTK_IS_CELL_VIEW (cellview));
- g_object_get (cellview, "model", &model, NULL);
- g_assert (model);
- g_assert (GTK_IS_TREE_MODEL (model));
- g_object_unref (model);
- path = gtk_tree_path_new_first ();
- gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (cellview), path);
-
- renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (cellview));
- g_assert (renderers);
- g_assert (g_list_length (renderers) == 1);
-
- window = gtk_builder_get_object (builder, "window1");
- g_assert (window);
- gtk_widget_destroy (GTK_WIDGET (window));
-
- g_object_unref (builder);
-}
-
-static void
-test_dialog (void)
-{
- GtkBuilder * builder;
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkDialog\" id=\"dialog1\">"
- " <child internal-child=\"vbox\">"
- " <object class=\"GtkVBox\" id=\"dialog1-vbox\">"
- " <child internal-child=\"action_area\">"
- " <object class=\"GtkHButtonBox\" id=\"dialog1-action_area\">"
- " <child>"
- " <object class=\"GtkButton\" id=\"button_cancel\"/>"
- " </child>"
- " <child>"
- " <object class=\"GtkButton\" id=\"button_ok\"/>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " <action-widgets>"
- " <action-widget response=\"3\">button_ok</action-widget>"
- " <action-widget response=\"-5\">button_cancel</action-widget>"
- " </action-widgets>"
- " </object>"
- "</interface>";
-
- GObject *dialog1;
- GObject *button_ok;
- GObject *button_cancel;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- dialog1 = gtk_builder_get_object (builder, "dialog1");
- button_ok = gtk_builder_get_object (builder, "button_ok");
- g_assert (gtk_dialog_get_response_for_widget (GTK_DIALOG (dialog1), GTK_WIDGET (button_ok)) == 3);
- button_cancel = gtk_builder_get_object (builder, "button_cancel");
- g_assert (gtk_dialog_get_response_for_widget (GTK_DIALOG (dialog1), GTK_WIDGET (button_cancel)) == -5);
-
- gtk_widget_destroy (GTK_WIDGET (dialog1));
- g_object_unref (builder);
-}
-
-static void
-test_message_dialog (void)
-{
- GtkBuilder * builder;
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkMessageDialog\" id=\"dialog1\">"
- " <child internal-child=\"message_area\">"
- " <object class=\"GtkVBox\" id=\"dialog-message-area\">"
- " <child>"
- " <object class=\"GtkExpander\" id=\"expander\"/>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
-
- GObject *dialog1;
- GObject *expander;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- dialog1 = gtk_builder_get_object (builder, "dialog1");
- expander = gtk_builder_get_object (builder, "expander");
- g_assert (GTK_IS_EXPANDER (expander));
- g_assert (gtk_widget_get_parent (GTK_WIDGET (expander)) == gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (dialog1)));
-
- gtk_widget_destroy (GTK_WIDGET (dialog1));
- g_object_unref (builder);
-}
-
-static void
-test_accelerators (void)
-{
- GtkBuilder *builder;
- const 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>";
- const gchar *buffer2 =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkTreeView\" id=\"treeview1\">"
- " <signal name=\"cursor-changed\" handler=\"gtk_main_quit\"/>"
- " <accelerator key=\"f\" modifiers=\"GDK_CONTROL_MASK\" signal=\"grab_focus\"/>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *window1;
- GSList *accel_groups;
- GObject *accel_group;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- window1 = gtk_builder_get_object (builder, "window1");
- g_assert (window1);
- g_assert (GTK_IS_WINDOW (window1));
-
- accel_groups = gtk_accel_groups_from_object (window1);
- g_assert (g_slist_length (accel_groups) == 1);
- accel_group = g_slist_nth_data (accel_groups, 0);
- g_assert (accel_group);
-
- gtk_widget_destroy (GTK_WIDGET (window1));
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- window1 = gtk_builder_get_object (builder, "window1");
- g_assert (window1);
- g_assert (GTK_IS_WINDOW (window1));
-
- accel_groups = gtk_accel_groups_from_object (window1);
- g_assert (g_slist_length (accel_groups) == 1);
- accel_group = g_slist_nth_data (accel_groups, 0);
- g_assert (accel_group);
-
- gtk_widget_destroy (GTK_WIDGET (window1));
- g_object_unref (builder);
-}
-
-static void
-test_widget (void)
-{
- const 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>";
- const 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>";
- const gchar *buffer3 =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkVBox\" id=\"vbox1\">"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label1\">"
- " <child internal-child=\"accessible\">"
- " <object class=\"AtkObject\" id=\"a11y-label1\">"
- " <property name=\"AtkObject::accessible-name\">A Label</property>"
- " </object>"
- " </child>"
- " <accessibility>"
- " <relation target=\"button1\" type=\"label-for\"/>"
- " </accessibility>"
- " </object>"
- " </child>"
- " <child>"
- " <object class=\"GtkButton\" id=\"button1\">"
- " <accessibility>"
- " <action action_name=\"click\" description=\"Sliff\"/>"
- " <action action_name=\"clack\" translatable=\"yes\">Sniff</action>"
- " </accessibility>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- GtkBuilder *builder;
- GObject *window1, *button1, *label1;
- AtkObject *accessible;
- AtkRelationSet *relation_set;
- AtkRelation *relation;
- char *name;
-
- builder = builder_new_from_string (buffer, -1, NULL);
- button1 = gtk_builder_get_object (builder, "button1");
-
-#if 0
- g_assert (gtk_widget_has_focus (GTK_WIDGET (button1)));
-#endif
- window1 = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window1));
-
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- button1 = gtk_builder_get_object (builder, "button1");
-
- g_assert (gtk_widget_get_receives_default (GTK_WIDGET (button1)));
-
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer3, -1, NULL);
-
- window1 = gtk_builder_get_object (builder, "window1");
- label1 = gtk_builder_get_object (builder, "label1");
-
- accessible = gtk_widget_get_accessible (GTK_WIDGET (label1));
- relation_set = atk_object_ref_relation_set (accessible);
- g_return_if_fail (atk_relation_set_get_n_relations (relation_set) == 1);
- relation = atk_relation_set_get_relation (relation_set, 0);
- g_return_if_fail (relation != NULL);
- g_return_if_fail (ATK_IS_RELATION (relation));
- g_return_if_fail (atk_relation_get_relation_type (relation) != ATK_RELATION_LABELLED_BY);
- g_object_unref (relation_set);
-
- g_object_get (G_OBJECT (accessible), "accessible-name", &name, NULL);
- g_return_if_fail (strcmp (name, "A Label") == 0);
- g_free (name);
-
- gtk_widget_destroy (GTK_WIDGET (window1));
- g_object_unref (builder);
-}
-
-static void
-test_window (void)
-{
- const gchar *buffer1 =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <property name=\"title\"></property>"
- " </object>"
- "</interface>";
- const gchar *buffer2 =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " </object>"
- "</interface>";
- GtkBuilder *builder;
- GObject *window1;
- gchar *title;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- window1 = gtk_builder_get_object (builder, "window1");
- g_object_get (window1, "title", &title, NULL);
- g_assert (strcmp (title, "") == 0);
- g_free (title);
- gtk_widget_destroy (GTK_WIDGET (window1));
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- window1 = gtk_builder_get_object (builder, "window1");
- gtk_widget_destroy (GTK_WIDGET (window1));
- g_object_unref (builder);
-}
-
-static void
-test_value_from_string (void)
-{
- GValue value = G_VALUE_INIT;
- GError *error = NULL;
- GtkBuilder *builder;
-
- builder = gtk_builder_new ();
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_STRING, "test", &value, &error));
- g_assert (G_VALUE_HOLDS_STRING (&value));
- g_assert (strcmp (g_value_get_string (&value), "test") == 0);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "true", &value, &error));
- g_assert (G_VALUE_HOLDS_BOOLEAN (&value));
- g_assert (g_value_get_boolean (&value) == TRUE);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "false", &value, &error));
- g_assert (G_VALUE_HOLDS_BOOLEAN (&value));
- g_assert (g_value_get_boolean (&value) == FALSE);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yes", &value, &error));
- g_assert (G_VALUE_HOLDS_BOOLEAN (&value));
- g_assert (g_value_get_boolean (&value) == TRUE);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "no", &value, &error));
- g_assert (G_VALUE_HOLDS_BOOLEAN (&value));
- g_assert (g_value_get_boolean (&value) == FALSE);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "0", &value, &error));
- g_assert (G_VALUE_HOLDS_BOOLEAN (&value));
- g_assert (g_value_get_boolean (&value) == FALSE);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "1", &value, &error));
- g_assert (G_VALUE_HOLDS_BOOLEAN (&value));
- g_assert (g_value_get_boolean (&value) == TRUE);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "tRuE", &value, &error));
- g_assert (G_VALUE_HOLDS_BOOLEAN (&value));
- g_assert (g_value_get_boolean (&value) == TRUE);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "blaurgh", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yess", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "trueee", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "12345", &value, &error));
- g_assert (G_VALUE_HOLDS_INT (&value));
- g_assert (g_value_get_int (&value) == 12345);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_LONG, "9912345", &value, &error));
- g_assert (G_VALUE_HOLDS_LONG (&value));
- g_assert (g_value_get_long (&value) == 9912345);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_UINT, "2345", &value, &error));
- g_assert (G_VALUE_HOLDS_UINT (&value));
- g_assert (g_value_get_uint (&value) == 2345);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "1.454", &value, &error));
- g_assert (G_VALUE_HOLDS_FLOAT (&value));
- g_assert (fabs (g_value_get_float (&value) - 1.454) < 0.00001);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "abc", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "/-+,abc", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "toplevel", &value, &error) == TRUE);
- g_assert (G_VALUE_HOLDS_ENUM (&value));
- g_assert (g_value_get_enum (&value) == GTK_WINDOW_TOPLEVEL);
- g_value_unset (&value);
-
- g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "sliff", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "foobar", &value, &error) == FALSE);
- g_value_unset (&value);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE));
- g_error_free (error);
- error = NULL;
-
- g_object_unref (builder);
-}
-
-static gboolean model_freed = FALSE;
-
-static void
-model_weakref (gpointer data,
- GObject *model)
-{
- model_freed = TRUE;
-}
-
-static void
-test_reference_counting (void)
-{
- GtkBuilder *builder;
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkListStore\" id=\"liststore1\"/>"
- " <object class=\"GtkListStore\" id=\"liststore2\"/>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkTreeView\" id=\"treeview1\">"
- " <property name=\"model\">liststore1</property>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkVBox\" id=\"vbox1\">"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label1\"/>"
- " <packing>"
- " <property name=\"pack-type\">start</property>"
- " </packing>"
- " </child>"
- " </object>"
- "</interface>";
- GObject *window, *treeview, *model;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- window = gtk_builder_get_object (builder, "window1");
- treeview = gtk_builder_get_object (builder, "treeview1");
- model = gtk_builder_get_object (builder, "liststore1");
- g_object_unref (builder);
-
- g_object_weak_ref (model, (GWeakNotify)model_weakref, NULL);
-
- g_assert (model_freed == FALSE);
- gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), NULL);
- g_assert (model_freed == TRUE);
-
- gtk_widget_destroy (GTK_WIDGET (window));
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- g_object_unref (builder);
-}
-
-static void
-test_icon_factory (void)
-{
- GtkBuilder *builder;
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkIconFactory\" id=\"iconfactory1\">"
- " <sources>"
- " <source stock-id=\"apple-red\" filename=\"apple-red.png\"/>"
- " </sources>"
- " </object>"
- "</interface>";
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkIconFactory\" id=\"iconfactory1\">"
- " <sources>"
- " <source stock-id=\"sliff\" direction=\"rtl\" state=\"active\""
- " size=\"menu\" filename=\"sloff.png\"/>"
- " <source stock-id=\"sliff\" direction=\"ltr\" state=\"selected\""
- " size=\"dnd\" filename=\"slurf.png\"/>"
- " </sources>"
- " </object>"
- "</interface>";
-#if 0
- const gchar buffer3[] =
- "<interface>"
- " <object class=\"GtkIconFactory\" id=\"iconfactory1\">"
- " <invalid/>"
- " </object>"
- "</interface>";
- const gchar buffer4[] =
- "<interface>"
- " <object class=\"GtkIconFactory\" id=\"iconfactory1\">"
- " <sources>"
- " <invalid/>"
- " </sources>"
- " </object>"
- "</interface>";
- const gchar buffer5[] =
- "<interface>"
- " <object class=\"GtkIconFactory\" id=\"iconfactory1\">"
- " <sources>"
- " <source/>"
- " </sources>"
- " </object>"
- "</interface>";
- GError *error = NULL;
-#endif
- GObject *factory;
- GtkIconSet *icon_set;
- GtkIconSource *icon_source;
- GtkWidget *image;
-
- builder = builder_new_from_string (buffer1, -1, NULL);
- factory = gtk_builder_get_object (builder, "iconfactory1");
- g_assert (factory != NULL);
-
- icon_set = gtk_icon_factory_lookup (GTK_ICON_FACTORY (factory), "apple-red");
- g_assert (icon_set != NULL);
- gtk_icon_factory_add_default (GTK_ICON_FACTORY (factory));
- image = gtk_image_new_from_stock ("apple-red", GTK_ICON_SIZE_BUTTON);
- g_assert (image != NULL);
- g_object_ref_sink (image);
- g_object_unref (image);
-
- g_object_unref (builder);
-
- builder = builder_new_from_string (buffer2, -1, NULL);
- factory = gtk_builder_get_object (builder, "iconfactory1");
- g_assert (factory != NULL);
-
- icon_set = gtk_icon_factory_lookup (GTK_ICON_FACTORY (factory), "sliff");
- g_assert (icon_set != NULL);
- g_assert (g_slist_length (icon_set->sources) == 2);
-
- icon_source = icon_set->sources->data;
- g_assert (gtk_icon_source_get_direction (icon_source) == GTK_TEXT_DIR_RTL);
- g_assert (gtk_icon_source_get_state (icon_source) == GTK_STATE_ACTIVE);
- g_assert (gtk_icon_source_get_size (icon_source) == GTK_ICON_SIZE_MENU);
- g_assert (g_str_has_suffix (gtk_icon_source_get_filename (icon_source), "sloff.png"));
-
- icon_source = icon_set->sources->next->data;
- g_assert (gtk_icon_source_get_direction (icon_source) == GTK_TEXT_DIR_LTR);
- g_assert (gtk_icon_source_get_state (icon_source) == GTK_STATE_SELECTED);
- g_assert (gtk_icon_source_get_size (icon_source) == GTK_ICON_SIZE_DND);
- g_assert (g_str_has_suffix (gtk_icon_source_get_filename (icon_source), "slurf.png"));
-
- g_object_unref (builder);
-
-#if 0
- error = NULL;
- gtk_builder_add_from_string (builder, buffer3, -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_TAG));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, buffer4, -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_TAG));
- g_error_free (error);
-
- error = NULL;
- gtk_builder_add_from_string (builder, buffer5, -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_ATTRIBUTE));
- g_error_free (error);
-#endif
-
-}
-
-typedef struct {
- gboolean weight;
- gboolean foreground;
- gboolean underline;
- gboolean size;
- gboolean font_desc;
- gboolean language;
-} FoundAttrs;
-
-static gboolean
-filter_pango_attrs (PangoAttribute *attr,
- gpointer data)
-{
- FoundAttrs *found = (FoundAttrs *)data;
-
- if (attr->klass->type == PANGO_ATTR_WEIGHT)
- found->weight = TRUE;
- else if (attr->klass->type == PANGO_ATTR_FOREGROUND)
- found->foreground = TRUE;
- else if (attr->klass->type == PANGO_ATTR_UNDERLINE)
- found->underline = TRUE;
- /* Make sure optional start/end properties are working */
- else if (attr->klass->type == PANGO_ATTR_SIZE &&
- attr->start_index == 5 &&
- attr->end_index == 10)
- found->size = TRUE;
- else if (attr->klass->type == PANGO_ATTR_FONT_DESC)
- found->font_desc = TRUE;
- else if (attr->klass->type == PANGO_ATTR_LANGUAGE)
- found->language = TRUE;
-
- return TRUE;
-}
-
-static void
-test_pango_attributes (void)
-{
- GtkBuilder *builder;
- FoundAttrs found = { 0, };
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkLabel\" id=\"label1\">"
- " <attributes>"
- " <attribute name=\"weight\" value=\"PANGO_WEIGHT_BOLD\"/>"
- " <attribute name=\"foreground\" value=\"DarkSlateGray\"/>"
- " <attribute name=\"underline\" value=\"True\"/>"
- " <attribute name=\"size\" value=\"4\" start=\"5\" end=\"10\"/>"
- " <attribute name=\"font-desc\" value=\"Sans Italic 22\"/>"
- " <attribute name=\"language\" value=\"pt_BR\"/>"
- " </attributes>"
- " </object>"
- "</interface>";
- const gchar err_buffer1[] =
- "<interface>"
- " <object class=\"GtkLabel\" id=\"label1\">"
- " <attributes>"
- " <attribute name=\"weight\"/>"
- " </attributes>"
- " </object>"
- "</interface>";
- const gchar err_buffer2[] =
- "<interface>"
- " <object class=\"GtkLabel\" id=\"label1\">"
- " <attributes>"
- " <attribute name=\"weight\" value=\"PANGO_WEIGHT_BOLD\" unrecognized=\"True\"/>"
- " </attributes>"
- " </object>"
- "</interface>";
-
- GObject *label;
- GError *error = NULL;
- PangoAttrList *attrs, *filtered;
-
- /* Test attributes are set */
- builder = builder_new_from_string (buffer, -1, NULL);
- label = gtk_builder_get_object (builder, "label1");
- g_assert (label != NULL);
-
- attrs = gtk_label_get_attributes (GTK_LABEL (label));
- g_assert (attrs != NULL);
-
- filtered = pango_attr_list_filter (attrs, filter_pango_attrs, &found);
- g_assert (filtered);
- pango_attr_list_unref (filtered);
-
- g_assert (found.weight);
- g_assert (found.foreground);
- g_assert (found.underline);
- g_assert (found.size);
- g_assert (found.language);
- g_assert (found.font_desc);
-
- g_object_unref (builder);
-
- /* Test errors are set */
- builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, err_buffer1, -1, &error);
- label = gtk_builder_get_object (builder, "label1");
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_MISSING_ATTRIBUTE));
- g_object_unref (builder);
- g_error_free (error);
- error = NULL;
-
- builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, err_buffer2, -1, &error);
- label = gtk_builder_get_object (builder, "label1");
-
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_ATTRIBUTE));
- g_object_unref (builder);
- g_error_free (error);
-}
-
-static void
-test_requires (void)
-{
- GtkBuilder *builder;
- GError *error = NULL;
- gchar *buffer;
- const gchar buffer_fmt[] =
- "<interface>"
- " <requires lib=\"gtk+\" version=\"%d.%d\"/>"
- "</interface>";
-
- buffer = g_strdup_printf (buffer_fmt, GTK_MAJOR_VERSION, GTK_MINOR_VERSION + 1);
- builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, buffer, -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_VERSION_MISMATCH));
- g_object_unref (builder);
- g_error_free (error);
- g_free (buffer);
-}
-
-static void
-test_add_objects (void)
-{
- GtkBuilder *builder;
- GError *error;
- gint ret;
- GObject *obj;
- GtkUIManager *manager;
- GtkWidget *menubar;
- GObject *menu, *label;
- GList *children;
- gchar *objects[2] = {"mainbox", NULL};
- gchar *objects2[3] = {"mainbox", "window2", NULL};
- gchar *objects3[3] = {"uimgr1", "menubar1"};
- gchar *objects4[2] = {"uimgr1", NULL};
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window\">"
- " <child>"
- " <object class=\"GtkVBox\" id=\"mainbox\">"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label1\">"
- " <property name=\"visible\">True</property>"
- " <property name=\"label\" translatable=\"no\">first label</property>"
- " </object>"
- " </child>"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label2\">"
- " <property name=\"visible\">True</property>"
- " <property name=\"label\" translatable=\"no\">second label</property>"
- " </object>"
- " <packing>"
- " <property name=\"position\">1</property>"
- " </packing>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window2\">"
- " <child>"
- " <object class=\"GtkLabel\" id=\"label3\">"
- " <property name=\"label\" translatable=\"no\">second label</property>"
- " </object>"
- " </child>"
- " </object>"
- "<interface/>";
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkUIManager\" id=\"uimgr1\">"
- " <child>"
- " <object class=\"GtkActionGroup\" id=\"ag1\">"
- " <child>"
- " <object class=\"GtkAction\" id=\"file\">"
- " <property name=\"label\">_File</property>"
- " </object>"
- " <accelerator key=\"n\" modifiers=\"GDK_CONTROL_MASK\"/>"
- " </child>"
- " </object>"
- " </child>"
- " <ui>"
- " <menubar name=\"menubar1\">"
- " <menu action=\"file\">"
- " </menu>"
- " </menubar>"
- " </ui>"
- " </object>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <child>"
- " <object class=\"GtkMenuBar\" id=\"menubar1\" constructor=\"uimgr1\"/>"
- " </child>"
- " </object>"
- "</interface>";
-
- error = NULL;
- builder = gtk_builder_new ();
- ret = gtk_builder_add_objects_from_string (builder, buffer, -1, objects, &error);
- g_assert (ret);
- g_assert (error == NULL);
- obj = gtk_builder_get_object (builder, "window");
- g_assert (obj == NULL);
- obj = gtk_builder_get_object (builder, "window2");
- g_assert (obj == NULL);
- obj = gtk_builder_get_object (builder, "mainbox");
- g_assert (GTK_IS_WIDGET (obj));
- g_object_unref (builder);
-
- error = NULL;
- builder = gtk_builder_new ();
- ret = gtk_builder_add_objects_from_string (builder, buffer, -1, objects2, &error);
- g_assert (ret);
- g_assert (error == NULL);
- obj = gtk_builder_get_object (builder, "window");
- g_assert (obj == NULL);
- obj = gtk_builder_get_object (builder, "window2");
- g_assert (GTK_IS_WINDOW (obj));
- gtk_widget_destroy (GTK_WIDGET (obj));
- obj = gtk_builder_get_object (builder, "mainbox");
- g_assert (GTK_IS_WIDGET (obj));
- g_object_unref (builder);
-
- /* test cherry picking a ui manager and menubar that depends on it */
- error = NULL;
- builder = gtk_builder_new ();
- ret = gtk_builder_add_objects_from_string (builder, buffer2, -1, objects3, &error);
- g_assert (ret);
- obj = gtk_builder_get_object (builder, "uimgr1");
- g_assert (GTK_IS_UI_MANAGER (obj));
- obj = gtk_builder_get_object (builder, "file");
- g_assert (GTK_IS_ACTION (obj));
- obj = gtk_builder_get_object (builder, "menubar1");
- g_assert (GTK_IS_MENU_BAR (obj));
- menubar = GTK_WIDGET (obj);
-
- children = gtk_container_get_children (GTK_CONTAINER (menubar));
- menu = children->data;
- g_assert (menu != NULL);
- g_assert (GTK_IS_MENU_ITEM (menu));
- g_assert (strcmp (gtk_widget_get_name (GTK_WIDGET (menu)), "file") == 0);
- g_list_free (children);
-
- label = G_OBJECT (gtk_bin_get_child (GTK_BIN (menu)));
- g_assert (label != NULL);
- g_assert (GTK_IS_LABEL (label));
- g_assert (strcmp (gtk_label_get_text (GTK_LABEL (label)), "File") == 0);
-
- g_object_unref (builder);
-
- /* test cherry picking just the ui manager */
- error = NULL;
- builder = gtk_builder_new ();
- ret = gtk_builder_add_objects_from_string (builder, buffer2, -1, objects4, &error);
- g_assert (ret);
- obj = gtk_builder_get_object (builder, "uimgr1");
- g_assert (GTK_IS_UI_MANAGER (obj));
- manager = GTK_UI_MANAGER (obj);
- obj = gtk_builder_get_object (builder, "file");
- g_assert (GTK_IS_ACTION (obj));
- menubar = gtk_ui_manager_get_widget (manager, "/menubar1");
- g_assert (GTK_IS_MENU_BAR (menubar));
-
- children = gtk_container_get_children (GTK_CONTAINER (menubar));
- menu = children->data;
- g_assert (menu != NULL);
- g_assert (GTK_IS_MENU_ITEM (menu));
- g_assert (strcmp (gtk_widget_get_name (GTK_WIDGET (menu)), "file") == 0);
- g_list_free (children);
-
- label = G_OBJECT (gtk_bin_get_child (GTK_BIN (menu)));
- g_assert (label != NULL);
- g_assert (GTK_IS_LABEL (label));
- g_assert (strcmp (gtk_label_get_text (GTK_LABEL (label)), "File") == 0);
-
- g_object_unref (builder);
-}
-
-static GtkWidget *
-get_parent_menubar (GtkWidget *menuitem)
-{
- GtkMenuShell *menu_shell;
- GtkWidget *attach = NULL;
-
- menu_shell = GTK_MENU_SHELL (gtk_widget_get_parent (menuitem));
-
- g_assert (GTK_IS_MENU_SHELL (menu_shell));
-
- while (menu_shell && !GTK_IS_MENU_BAR (menu_shell))
- {
- if (GTK_IS_MENU (menu_shell) &&
- (attach = gtk_menu_get_attach_widget (GTK_MENU (menu_shell))) != NULL)
- menu_shell = GTK_MENU_SHELL (gtk_widget_get_parent (attach));
- else
- menu_shell = NULL;
- }
-
- return menu_shell ? GTK_WIDGET (menu_shell) : NULL;
-}
-
-static void
-test_menus (void)
-{
- const gchar *buffer =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <accel-groups>"
- " <group name=\"accelgroup1\"/>"
- " </accel-groups>"
- " <child>"
- " <object class=\"GtkVBox\" id=\"vbox1\">"
- " <property name=\"visible\">True</property>"
- " <property name=\"orientation\">vertical</property>"
- " <child>"
- " <object class=\"GtkMenuBar\" id=\"menubar1\">"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkMenuItem\" id=\"menuitem1\">"
- " <property name=\"visible\">True</property>"
- " <property name=\"label\" translatable=\"yes\">_File</property>"
- " <property name=\"use_underline\">True</property>"
- " <child type=\"submenu\">"
- " <object class=\"GtkMenu\" id=\"menu1\">"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkImageMenuItem\" id=\"imagemenuitem1\">"
- " <property name=\"label\">gtk-new</property>"
- " <property name=\"visible\">True</property>"
- " <property name=\"use_stock\">True</property>"
- " <property name=\"accel_group\">accelgroup1</property>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "<object class=\"GtkAccelGroup\" id=\"accelgroup1\"/>"
- "</interface>";
-
- const gchar *buffer1 =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window1\">"
- " <accel-groups>"
- " <group name=\"accelgroup1\"/>"
- " </accel-groups>"
- " <child>"
- " <object class=\"GtkVBox\" id=\"vbox1\">"
- " <property name=\"visible\">True</property>"
- " <property name=\"orientation\">vertical</property>"
- " <child>"
- " <object class=\"GtkMenuBar\" id=\"menubar1\">"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkImageMenuItem\" id=\"imagemenuitem1\">"
- " <property name=\"visible\">True</property>"
- " <child>"
- " <object class=\"GtkLabel\" id=\"custom1\">"
- " <property name=\"visible\">True</property>"
- " <property name=\"label\">a label</property>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " </object>"
- "<object class=\"GtkAccelGroup\" id=\"accelgroup1\"/>"
- "</interface>";
- GtkBuilder *builder;
- GtkWidget *child;
- GtkWidget *window, *item;
- GtkAccelGroup *accel_group;
- GtkWidget *item_accel_label, *sample_accel_label, *sample_menu_item, *custom;
-
- /* Check that the item has the correct accel label string set
- */
- builder = builder_new_from_string (buffer, -1, NULL);
- window = (GtkWidget *)gtk_builder_get_object (builder, "window1");
- item = (GtkWidget *)gtk_builder_get_object (builder, "imagemenuitem1");
- accel_group = (GtkAccelGroup *)gtk_builder_get_object (builder, "accelgroup1");
-
- gtk_widget_show_all (window);
-
- sample_menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group);
-
- child = gtk_bin_get_child (GTK_BIN (sample_menu_item));
- g_assert (child);
- g_assert (GTK_IS_ACCEL_LABEL (child));
- sample_accel_label = child;
- gtk_widget_show (sample_accel_label);
-
- child = gtk_bin_get_child (GTK_BIN (item));
- g_assert (child);
- g_assert (GTK_IS_ACCEL_LABEL (child));
- item_accel_label = child;
-
- gtk_accel_label_refetch (GTK_ACCEL_LABEL (sample_accel_label));
- gtk_accel_label_refetch (GTK_ACCEL_LABEL (item_accel_label));
-
- g_assert (gtk_label_get_text (GTK_LABEL (sample_accel_label)) != NULL);
- g_assert (gtk_label_get_text (GTK_LABEL (item_accel_label)) != NULL);
- g_assert (strcmp (gtk_label_get_text (GTK_LABEL (item_accel_label)),
- gtk_label_get_text (GTK_LABEL (sample_accel_label))) == 0);
-
- /* Check the menu hierarchy worked here */
- g_assert (get_parent_menubar (item));
-
- gtk_widget_destroy (GTK_WIDGET (window));
- gtk_widget_destroy (sample_menu_item);
- g_object_unref (builder);
-
-
- /* Check that we can add alien children to menu items via normal
- * GtkContainer apis.
- */
- builder = builder_new_from_string (buffer1, -1, NULL);
- window = (GtkWidget *)gtk_builder_get_object (builder, "window1");
- item = (GtkWidget *)gtk_builder_get_object (builder, "imagemenuitem1");
- custom = (GtkWidget *)gtk_builder_get_object (builder, "custom1");
-
- g_assert (gtk_widget_get_parent (custom) == item);
-
- gtk_widget_destroy (GTK_WIDGET (window));
- g_object_unref (builder);
-
-}
-
-
-static void
-test_file (const gchar *filename)
-{
- GtkBuilder *builder;
- GError *error = NULL;
- GSList *l, *objects;
-
- builder = gtk_builder_new ();
-
- if (!gtk_builder_add_from_file (builder, filename, &error))
- {
- g_error ("%s", error->message);
- g_error_free (error);
- return;
- }
-
- objects = gtk_builder_get_objects (builder);
- for (l = objects; l; l = l->next)
- {
- GObject *obj = (GObject*)l->data;
-
- if (GTK_IS_DIALOG (obj))
- {
- g_print ("Running dialog %s.\n",
- gtk_widget_get_name (GTK_WIDGET (obj)));
- gtk_dialog_run (GTK_DIALOG (obj));
- }
- else if (GTK_IS_WINDOW (obj))
- {
- g_signal_connect (obj, "destroy", G_CALLBACK (gtk_main_quit), NULL);
- g_print ("Showing %s.\n",
- gtk_widget_get_name (GTK_WIDGET (obj)));
- gtk_widget_show_all (GTK_WIDGET (obj));
- }
- }
-
- gtk_main ();
-
- g_object_unref (builder);
- builder = NULL;
-}
-
-static void
-test_message_area (void)
-{
- GtkBuilder *builder;
- GObject *obj, *obj1;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkInfoBar\" id=\"infobar1\">"
- " <child internal-child=\"content_area\">"
- " <object class=\"GtkHBox\" id=\"contentarea1\">"
- " <child>"
- " <object class=\"GtkLabel\" id=\"content\">"
- " <property name=\"label\" translatable=\"yes\">Message</property>"
- " </object>"
- " <packing>"
- " <property name='expand'>False</property>"
- " </packing>"
- " </child>"
- " </object>"
- " </child>"
- " <child internal-child=\"action_area\">"
- " <object class=\"GtkVButtonBox\" id=\"actionarea1\">"
- " <child>"
- " <object class=\"GtkButton\" id=\"button_ok\">"
- " <property name=\"label\">gtk-ok</property>"
- " <property name=\"use-stock\">yes</property>"
- " </object>"
- " </child>"
- " </object>"
- " </child>"
- " <action-widgets>"
- " <action-widget response=\"1\">button_ok</action-widget>"
- " </action-widgets>"
- " </object>"
- "</interface>";
-
- builder = builder_new_from_string (buffer, -1, NULL);
- obj = gtk_builder_get_object (builder, "infobar1");
- g_assert (GTK_IS_INFO_BAR (obj));
- obj1 = gtk_builder_get_object (builder, "content");
- g_assert (GTK_IS_LABEL (obj1));
- g_assert (gtk_widget_get_parent (gtk_widget_get_parent (GTK_WIDGET (obj1))) == GTK_WIDGET (obj));
-
- obj1 = gtk_builder_get_object (builder, "button_ok");
- g_assert (GTK_IS_BUTTON (obj1));
- g_assert (gtk_widget_get_parent (gtk_widget_get_parent (GTK_WIDGET (obj1))) == GTK_WIDGET (obj));
-
- g_object_unref (builder);
-}
-
-static void
-test_gmenu (void)
-{
- GtkBuilder *builder;
- GObject *obj, *obj1;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window\">"
- " </object>"
- " <menu id='edit-menu'>"
- " <section>"
- " <item>"
- " <attribute name='label'>Undo</attribute>"
- " <attribute name='action'>undo</attribute>"
- " </item>"
- " <item>"
- " <attribute name='label'>Redo</attribute>"
- " <attribute name='action'>redo</attribute>"
- " </item>"
- " </section>"
- " <section></section>"
- " <section>"
- " <attribute name='label'>Copy &amp; Paste</attribute>"
- " <item>"
- " <attribute name='label'>Cut</attribute>"
- " <attribute name='action'>cut</attribute>"
- " </item>"
- " <item>"
- " <attribute name='label'>Copy</attribute>"
- " <attribute name='action'>copy</attribute>"
- " </item>"
- " <item>"
- " <attribute name='label'>Paste</attribute>"
- " <attribute name='action'>paste</attribute>"
- " </item>"
- " </section>"
- " <item><link name='section' id='blargh'>"
- " <item>"
- " <attribute name='label'>Bold</attribute>"
- " <attribute name='action'>bold</attribute>"
- " </item>"
- " <submenu>"
- " <attribute name='label'>Language</attribute>"
- " <item>"
- " <attribute name='label'>Latin</attribute>"
- " <attribute name='action'>lang</attribute>"
- " <attribute name='target'>'latin'</attribute>"
- " </item>"
- " <item>"
- " <attribute name='label'>Greek</attribute>"
- " <attribute name='action'>lang</attribute>"
- " <attribute name='target'>'greek'</attribute>"
- " </item>"
- " <item>"
- " <attribute name='label'>Urdu</attribute>"
- " <attribute name='action'>lang</attribute>"
- " <attribute name='target'>'urdu'</attribute>"
- " </item>"
- " </submenu>"
- " </link></item>"
- " </menu>"
- "</interface>";
-
- builder = builder_new_from_string (buffer, -1, NULL);
- obj = gtk_builder_get_object (builder, "window");
- g_assert (GTK_IS_WINDOW (obj));
- obj1 = gtk_builder_get_object (builder, "edit-menu");
- g_assert (G_IS_MENU_MODEL (obj1));
- obj1 = gtk_builder_get_object (builder, "blargh");
- g_assert (G_IS_MENU_MODEL (obj1));
- g_object_unref (builder);
-}
-
-static void
-test_level_bar (void)
-{
- GtkBuilder *builder;
- GError *error = NULL;
- GObject *obj, *obj1;
- const gchar buffer1[] =
- "<interface>"
- " <object class=\"GtkWindow\" id=\"window\">"
- " <child>"
- " <object class=\"GtkLevelBar\" id=\"levelbar\">"
- " <property name=\"value\">4.70</property>"
- " <property name=\"min-value\">2</property>"
- " <property name=\"max-value\">5</property>"
- " <offsets>"
- " <offset name=\"low\" value=\"2.25\"/>"
- " <offset name=\"custom\" value=\"3\"/>"
- " <offset name=\"high\" value=\"3\"/>"
- " </offsets>"
- " </object>"
- " </child>"
- " </object>"
- "</interface>";
- const gchar buffer2[] =
- "<interface>"
- " <object class=\"GtkLevelBar\" id=\"levelbar\">"
- " <offsets>"
- " <offset name=\"low\" bogus_attr=\"foo\"/>"
- " </offsets>"
- " </object>"
- "</interface>";
- const gchar buffer3[] =
- "<interface>"
- " <object class=\"GtkLevelBar\" id=\"levelbar\">"
- " <offsets>"
- " <offset name=\"low\" value=\"1\"/>"
- " </offsets>"
- " <bogus_tag>"
- " </bogus_tag>"
- " </object>"
- "</interface>";
-
- builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, buffer1, -1, &error);
- g_assert (error == NULL);
-
- obj = gtk_builder_get_object (builder, "window");
- g_assert (GTK_IS_WINDOW (obj));
- obj1 = gtk_builder_get_object (builder, "levelbar");
- g_assert (GTK_IS_LEVEL_BAR (obj1));
- g_object_unref (builder);
-
- error = NULL;
- builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, buffer2, -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_ATTRIBUTE));
- g_error_free (error);
- g_object_unref (builder);
-
- error = NULL;
- builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, buffer3, -1, &error);
- g_assert (g_error_matches (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_UNHANDLED_TAG));
- g_error_free (error);
- g_object_unref (builder);
-}
-
-static GObject *external_object = NULL, *external_object_swapped = NULL;
-
-void
-on_button_clicked (GtkButton *button, GObject *data)
-{
- external_object = data;
-}
-
-void
-on_button_clicked_swapped (GObject *data, GtkButton *button)
-{
- external_object_swapped = data;
-}
-
-static void
-test_expose_object (void)
-{
- GtkBuilder *builder;
- GError *error = NULL;
- GtkWidget *image;
- GObject *obj;
- const gchar buffer[] =
- "<interface>"
- " <object class=\"GtkButton\" id=\"button\">"
- " <property name=\"image\">external_image</property>"
- " <signal name=\"clicked\" handler=\"on_button_clicked\" object=\"builder\" swapped=\"no\"/>"
- " <signal name=\"clicked\" handler=\"on_button_clicked_swapped\" object=\"builder\"/>"
- " </object>"
- "</interface>";
-
- image = gtk_image_new ();
- builder = gtk_builder_new ();
- gtk_builder_expose_object (builder, "external_image", G_OBJECT (image));
- gtk_builder_expose_object (builder, "builder", G_OBJECT (builder));
- gtk_builder_add_from_string (builder, buffer, -1, &error);
- g_assert (error == NULL);
-
- obj = gtk_builder_get_object (builder, "button");
- g_assert (GTK_IS_BUTTON (obj));
-
- g_assert (gtk_button_get_image (GTK_BUTTON (obj)) == image);
-
- /* Connect signals and fake clicked event */
- gtk_builder_connect_signals (builder, NULL);
- gtk_button_clicked (GTK_BUTTON (obj));
-
- g_assert (external_object == G_OBJECT (builder));
- g_assert (external_object_swapped == G_OBJECT (builder));
-}
-
-int
-main (int argc, char **argv)
-{
- /* initialize test program */
- gtk_test_init (&argc, &argv);
-
- if (argc > 1)
- {
- test_file (argv[1]);
- return 0;
- }
-
- g_test_add_func ("/Builder/Parser", test_parser);
- g_test_add_func ("/Builder/Types", test_types);
- g_test_add_func ("/Builder/Construct-Only Properties", test_construct_only_property);
- g_test_add_func ("/Builder/Children", test_children);
- g_test_add_func ("/Builder/Child Properties", test_child_properties);
- g_test_add_func ("/Builder/Object Properties", test_object_properties);
- g_test_add_func ("/Builder/Notebook", test_notebook);
- g_test_add_func ("/Builder/Domain", test_domain);
- g_test_add_func ("/Builder/Signal Autoconnect", test_connect_signals);
- g_test_add_func ("/Builder/UIManager Simple", test_uimanager_simple);
- g_test_add_func ("/Builder/Spin Button", test_spin_button);
- g_test_add_func ("/Builder/SizeGroup", test_sizegroup);
- g_test_add_func ("/Builder/ListStore", test_list_store);
- g_test_add_func ("/Builder/TreeStore", test_tree_store);
- g_test_add_func ("/Builder/TreeView Column", test_treeview_column);
- g_test_add_func ("/Builder/IconView", test_icon_view);
- g_test_add_func ("/Builder/ComboBox", test_combo_box);
-#if 0
- g_test_add_func ("/Builder/ComboBox Entry", test_combo_box_entry);
-#endif
- g_test_add_func ("/Builder/CellView", test_cell_view);
- g_test_add_func ("/Builder/Dialog", test_dialog);
- g_test_add_func ("/Builder/Accelerators", test_accelerators);
- g_test_add_func ("/Builder/Widget", test_widget);
- g_test_add_func ("/Builder/Value From String", test_value_from_string);
- g_test_add_func ("/Builder/Reference Counting", test_reference_counting);
- g_test_add_func ("/Builder/Window", test_window);
- g_test_add_func ("/Builder/IconFactory", test_icon_factory);
- g_test_add_func ("/Builder/PangoAttributes", test_pango_attributes);
- g_test_add_func ("/Builder/Requires", test_requires);
- g_test_add_func ("/Builder/AddObjects", test_add_objects);
- g_test_add_func ("/Builder/Menus", test_menus);
- g_test_add_func ("/Builder/MessageArea", test_message_area);
- g_test_add_func ("/Builder/MessageDialog", test_message_dialog);
- g_test_add_func ("/Builder/GMenu", test_gmenu);
- g_test_add_func ("/Builder/LevelBar", test_level_bar);
- g_test_add_func ("/Builder/Expose Object", test_expose_object);
-
- return g_test_run();
-}
-
diff --git a/gtk/tests/cellarea.c b/gtk/tests/cellarea.c
deleted file mode 100644
index 98072ed046..0000000000
--- a/gtk/tests/cellarea.c
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat, Inc.
- * Author: Matthias Clasen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-/* tests related to handling of the cell-area property in
- * GtkCellLayout implementations
- */
-
-/* test that we have a cell area after new() */
-static void
-test_iconview_new (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- view = gtk_icon_view_new ();
-
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == gtk_icon_view_get_item_orientation (GTK_ICON_VIEW (view)));
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that new_with_area() keeps the provided area */
-static void
-test_iconview_new_with_area (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- view = gtk_icon_view_new_with_area (area);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that g_object_new keeps the provided area */
-static void
-test_iconview_object_new (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
- view = g_object_new (GTK_TYPE_ICON_VIEW, "cell-area", area, NULL);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == gtk_icon_view_get_item_orientation (GTK_ICON_VIEW (view)));
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-typedef GtkIconView MyIconView;
-typedef GtkIconViewClass MyIconViewClass;
-
-GType my_icon_view_get_type (void);
-
-G_DEFINE_TYPE (MyIconView, my_icon_view, GTK_TYPE_ICON_VIEW)
-
-static void
-my_icon_view_class_init (MyIconViewClass *klass)
-{
-}
-
-static gint subclass_init;
-
-static void
-my_icon_view_init (MyIconView *view)
-{
- GtkCellArea *area;
-
- if (subclass_init == 0)
- {
- /* do nothing to area */
- }
- else if (subclass_init == 1)
- {
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
- }
-}
-
-/* test that an iconview subclass has an area */
-static void
-test_iconview_subclass0 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- view = g_object_new (my_icon_view_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that an iconview subclass keeps the provided area */
-static void
-test_iconview_subclass1 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- area = gtk_cell_area_box_new ();
- view = g_object_new (my_icon_view_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test we can access the area in subclass init */
-static void
-test_iconview_subclass2 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 1;
-
- view = g_object_new (my_icon_view_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test we get a warning if an area is provided, but ignored */
-static void
-test_iconview_subclass3 (void)
-{
- subclass_init = 1;
-
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- view = g_object_new (my_icon_view_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-
- exit (0);
- }
- g_test_trap_assert_failed ();
- g_test_trap_assert_stderr ("*ignoring construct property*");
-}
-
-/* test that we have a cell area after new() */
-static void
-test_combobox_new (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- view = gtk_combo_box_new ();
-
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that new_with_area() keeps the provided area */
-static void
-test_combobox_new_with_area (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- view = gtk_combo_box_new_with_area (area);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that g_object_new keeps the provided area */
-static void
-test_combobox_object_new (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
- view = g_object_new (GTK_TYPE_COMBO_BOX, "cell-area", area, NULL);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-typedef GtkComboBox MyComboBox;
-typedef GtkComboBoxClass MyComboBoxClass;
-
-GType my_combo_box_get_type (void);
-
-G_DEFINE_TYPE (MyComboBox, my_combo_box, GTK_TYPE_COMBO_BOX)
-
-static void
-my_combo_box_class_init (MyComboBoxClass *klass)
-{
-}
-
-static void
-my_combo_box_init (MyComboBox *view)
-{
- GtkCellArea *area;
-
- if (subclass_init == 0)
- {
- /* do nothing to area */
- }
- else if (subclass_init == 1)
- {
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_VERTICAL);
- }
-}
-
-/* test that a combobox subclass has an area */
-static void
-test_combobox_subclass0 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- view = g_object_new (my_combo_box_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that a combobox subclass keeps the provided area */
-static void
-test_combobox_subclass1 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- area = gtk_cell_area_box_new ();
- view = g_object_new (my_combo_box_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test we can access the area in subclass init */
-static void
-test_combobox_subclass2 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 1;
-
- view = g_object_new (my_combo_box_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test we get a warning if an area is provided, but ignored */
-static void
-test_combobox_subclass3 (void)
-{
- subclass_init = 1;
-
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- view = g_object_new (my_combo_box_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-
- exit (0);
- }
- g_test_trap_assert_failed ();
- g_test_trap_assert_stderr ("*ignoring construct property*");
-}
-
-/* test that we have a cell area after new() */
-static void
-test_cellview_new (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- view = gtk_cell_view_new ();
-
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that new_with_context() keeps the provided area */
-static void
-test_cellview_new_with_context (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
- GtkCellAreaContext *context;
-
- area = gtk_cell_area_box_new ();
- context = gtk_cell_area_create_context (area);
- view = gtk_cell_view_new_with_context (area, context);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that g_object_new keeps the provided area */
-static void
-test_cellview_object_new (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
- view = g_object_new (GTK_TYPE_CELL_VIEW, "cell-area", area, NULL);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-typedef GtkCellView MyCellView;
-typedef GtkCellViewClass MyCellViewClass;
-
-GType my_cell_view_get_type (void);
-
-G_DEFINE_TYPE (MyCellView, my_cell_view, GTK_TYPE_CELL_VIEW)
-
-static void
-my_cell_view_class_init (MyCellViewClass *klass)
-{
-}
-
-static void
-my_cell_view_init (MyCellView *view)
-{
- GtkCellArea *area;
-
- if (subclass_init == 0)
- {
- /* do nothing to area */
- }
- else if (subclass_init == 1)
- {
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_VERTICAL);
- }
-}
-
-/* test that a cellview subclass has an area */
-static void
-test_cellview_subclass0 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- view = g_object_new (my_cell_view_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test that a cellview subclass keeps the provided area */
-static void
-test_cellview_subclass1 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- area = gtk_cell_area_box_new ();
- view = g_object_new (my_cell_view_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test we can access the area in subclass init */
-static void
-test_cellview_subclass2 (void)
-{
- GtkWidget *view;
- GtkCellArea *area;
-
- subclass_init = 1;
-
- view = g_object_new (my_cell_view_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-}
-
-/* test we get a warning if an area is provided, but ignored */
-static void
-test_cellview_subclass3 (void)
-{
- subclass_init = 1;
-
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- GtkWidget *view;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- view = g_object_new (my_cell_view_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (view);
- g_object_unref (view);
-
- exit (0);
- }
- g_test_trap_assert_failed ();
- g_test_trap_assert_stderr ("*ignoring construct property*");
-}
-
-/* test that we have a cell area after new() */
-static void
-test_column_new (void)
-{
- GtkTreeViewColumn *col;
- GtkCellArea *area;
-
- col = gtk_tree_view_column_new ();
-
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
-
- g_object_ref_sink (col);
- g_object_unref (col);
-}
-
-/* test that new_with_area() keeps the provided area */
-static void
-test_column_new_with_area (void)
-{
- GtkTreeViewColumn *col;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- col = gtk_tree_view_column_new_with_area (area);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)) == area);
-
- g_object_ref_sink (col);
- g_object_unref (col);
-}
-
-/* test that g_object_new keeps the provided area */
-static void
-test_column_object_new (void)
-{
- GtkTreeViewColumn *col;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
- col = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN, "cell-area", area, NULL);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)) == area);
-
- g_object_ref_sink (col);
- g_object_unref (col);
-}
-
-typedef GtkTreeViewColumn MyTreeViewColumn;
-typedef GtkTreeViewColumnClass MyTreeViewColumnClass;
-
-GType my_tree_view_column_get_type (void);
-
-G_DEFINE_TYPE (MyTreeViewColumn, my_tree_view_column, GTK_TYPE_TREE_VIEW_COLUMN)
-
-static void
-my_tree_view_column_class_init (MyTreeViewColumnClass *klass)
-{
-}
-
-static void
-my_tree_view_column_init (MyTreeViewColumn *col)
-{
- GtkCellArea *area;
-
- if (subclass_init == 0)
- {
- /* do nothing to area */
- }
- else if (subclass_init == 1)
- {
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_VERTICAL);
- }
-}
-
-/* test that a column subclass has an area */
-static void
-test_column_subclass0 (void)
-{
- GtkTreeViewColumn *col;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- col = g_object_new (my_tree_view_column_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (col);
- g_object_unref (col);
-}
-
-/* test that a column subclass keeps the provided area */
-static void
-test_column_subclass1 (void)
-{
- GtkTreeViewColumn *col;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- area = gtk_cell_area_box_new ();
- col = g_object_new (my_tree_view_column_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (col);
- g_object_unref (col);
-}
-
-/* test we can access the area in subclass init */
-static void
-test_column_subclass2 (void)
-{
- GtkTreeViewColumn *col;
- GtkCellArea *area;
-
- subclass_init = 1;
-
- col = g_object_new (my_tree_view_column_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (col);
- g_object_unref (col);
-}
-
-/* test we get a warning if an area is provided, but ignored */
-static void
-test_column_subclass3 (void)
-{
- subclass_init = 1;
-
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- GtkTreeViewColumn *col;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- col = g_object_new (my_tree_view_column_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (col);
- g_object_unref (col);
-
- exit (0);
- }
- g_test_trap_assert_failed ();
- g_test_trap_assert_stderr ("*ignoring construct property*");
-}
-
-/* test that we have a cell area after new() */
-static void
-test_completion_new (void)
-{
- GtkEntryCompletion *c;
- GtkCellArea *area;
-
- c = gtk_entry_completion_new ();
-
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
-
- g_object_ref_sink (c);
- g_object_unref (c);
-}
-
-/* test that new_with_area() keeps the provided area */
-static void
-test_completion_new_with_area (void)
-{
- GtkEntryCompletion *c;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- c = gtk_entry_completion_new_with_area (area);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)) == area);
-
- g_object_ref_sink (c);
- g_object_unref (c);
-}
-
-/* test that g_object_new keeps the provided area */
-static void
-test_completion_object_new (void)
-{
- GtkEntryCompletion *c;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
- c = g_object_new (GTK_TYPE_ENTRY_COMPLETION, "cell-area", area, NULL);
- g_assert (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)) == area);
-
- g_object_ref_sink (c);
- g_object_unref (c);
-}
-
-typedef GtkEntryCompletion MyEntryCompletion;
-typedef GtkEntryCompletionClass MyEntryCompletionClass;
-
-GType my_entry_completion_get_type (void);
-
-G_DEFINE_TYPE (MyEntryCompletion, my_entry_completion, GTK_TYPE_ENTRY_COMPLETION)
-
-static void
-my_entry_completion_class_init (MyEntryCompletionClass *klass)
-{
-}
-
-static void
-my_entry_completion_init (MyEntryCompletion *c)
-{
- GtkCellArea *area;
-
- if (subclass_init == 0)
- {
- /* do nothing to area */
- }
- else if (subclass_init == 1)
- {
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
- gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_VERTICAL);
- }
-}
-
-/* test that a completion subclass has an area */
-static void
-test_completion_subclass0 (void)
-{
- GtkEntryCompletion *c;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- c = g_object_new (my_entry_completion_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (c);
- g_object_unref (c);
-}
-
-/* test that a completion subclass keeps the provided area */
-static void
-test_completion_subclass1 (void)
-{
- GtkEntryCompletion *c;
- GtkCellArea *area;
-
- subclass_init = 0;
-
- area = gtk_cell_area_box_new ();
- c = g_object_new (my_entry_completion_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_HORIZONTAL);
-
- g_object_ref_sink (c);
- g_object_unref (c);
-}
-
-/* test we can access the area in subclass init */
-static void
-test_completion_subclass2 (void)
-{
- GtkEntryCompletion *c;
- GtkCellArea *area;
-
- subclass_init = 1;
-
- c = g_object_new (my_entry_completion_get_type (), NULL);
- area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c));
- g_assert (GTK_IS_CELL_AREA_BOX (area));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (c);
- g_object_unref (c);
-}
-
-/* test we get a warning if an area is provided, but ignored */
-static void
-test_completion_subclass3 (void)
-{
- subclass_init = 1;
-
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- GtkEntryCompletion *c;
- GtkCellArea *area;
-
- area = gtk_cell_area_box_new ();
- c = g_object_new (my_entry_completion_get_type (), "cell-area", area, NULL);
- g_assert (area == gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)));
- g_assert (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == GTK_ORIENTATION_VERTICAL);
-
- g_object_ref_sink (c);
- g_object_unref (c);
-
- exit (0);
- }
- g_test_trap_assert_failed ();
- g_test_trap_assert_stderr ("*ignoring construct property*");
-}
-
-int
-main (int argc, char *argv[])
-{
- gtk_test_init (&argc, &argv);
- g_test_bug_base ("http://bugzilla.gnome.org/");
- gtk_test_register_all_types();
-
- g_test_add_func ("/tests/iconview-new", test_iconview_new);
- g_test_add_func ("/tests/iconview-new-with-area", test_iconview_new_with_area);
- g_test_add_func ("/tests/iconview-object-new", test_iconview_object_new);
- g_test_add_func ("/tests/iconview-subclass0", test_iconview_subclass0);
- g_test_add_func ("/tests/iconview-subclass1", test_iconview_subclass1);
- g_test_add_func ("/tests/iconview-subclass2", test_iconview_subclass2);
- g_test_add_func ("/tests/iconview-subclass3", test_iconview_subclass3);
-
- g_test_add_func ("/tests/combobox-new", test_combobox_new);
- g_test_add_func ("/tests/combobox-new-with-area", test_combobox_new_with_area);
- g_test_add_func ("/tests/combobox-object-new", test_combobox_object_new);
- g_test_add_func ("/tests/combobox-subclass0", test_combobox_subclass0);
- g_test_add_func ("/tests/combobox-subclass1", test_combobox_subclass1);
- g_test_add_func ("/tests/combobox-subclass2", test_combobox_subclass2);
- g_test_add_func ("/tests/combobox-subclass3", test_combobox_subclass3);
-
- g_test_add_func ("/tests/cellview-new", test_cellview_new);
- g_test_add_func ("/tests/cellview-new-with-context", test_cellview_new_with_context);
- g_test_add_func ("/tests/cellview-object-new", test_cellview_object_new);
- g_test_add_func ("/tests/cellview-subclass0", test_cellview_subclass0);
- g_test_add_func ("/tests/cellview-subclass1", test_cellview_subclass1);
- g_test_add_func ("/tests/cellview-subclass2", test_cellview_subclass2);
- g_test_add_func ("/tests/cellview-subclass3", test_cellview_subclass3);
-
- g_test_add_func ("/tests/column-new", test_column_new);
- g_test_add_func ("/tests/column-new-with-area", test_column_new_with_area);
- g_test_add_func ("/tests/column-object-new", test_column_object_new);
- g_test_add_func ("/tests/column-subclass0", test_column_subclass0);
- g_test_add_func ("/tests/column-subclass1", test_column_subclass1);
- g_test_add_func ("/tests/column-subclass2", test_column_subclass2);
- g_test_add_func ("/tests/column-subclass3", test_column_subclass3);
-
- g_test_add_func ("/tests/completion-new", test_completion_new);
- g_test_add_func ("/tests/completion-new-with-area", test_completion_new_with_area);
- g_test_add_func ("/tests/completion-object-new", test_completion_object_new);
- g_test_add_func ("/tests/completion-subclass0", test_completion_subclass0);
- g_test_add_func ("/tests/completion-subclass1", test_completion_subclass1);
- g_test_add_func ("/tests/completion-subclass2", test_completion_subclass2);
- g_test_add_func ("/tests/completion-subclass3", test_completion_subclass3);
-
- return g_test_run();
-}
diff --git a/gtk/tests/crossingevents.c b/gtk/tests/crossingevents.c
deleted file mode 100644
index be210f3c17..0000000000
--- a/gtk/tests/crossingevents.c
+++ /dev/null
@@ -1,628 +0,0 @@
-/*
- * crossingevents.c: A test for crossing events
- *
- * Copyright (C) 2008 Cody Russell
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <string.h>
-
-typedef struct {
- GtkWidget *window;
- GtkWidget *eventbox;
- GtkWidget *frame;
- GtkWidget *button;
- GtkWidget *check;
- gboolean events_connected;
- GQueue *queue;
-} CrossingTest;
-
-typedef struct {
- gboolean entered;
- gchar *name;
- gboolean synthesized;
- GdkCrossingMode mode;
- GdkNotifyType detail;
-} CrossingEventData;
-
-#define SLEEP_DURATION 100
-
-void start_events (CrossingTest *test);
-void stop_events (CrossingTest *test);
-
-static gboolean
-sleep_timeout_cb (gpointer data)
-{
- gtk_main_quit ();
- return FALSE;
-}
-
-static void
-sleep_in_main_loop (double fraction)
-{
- /* process all pending idles and events */
- while (g_main_context_pending (NULL))
- g_main_context_iteration (NULL, FALSE);
- /* sleeping probably isn't strictly necessary here */
- gdk_threads_add_timeout_full (G_MAXINT, fraction * SLEEP_DURATION, sleep_timeout_cb, NULL, NULL);
- gtk_main ();
- /* process any pending idles or events that arrived during sleep */
- while (g_main_context_pending (NULL))
- g_main_context_iteration (NULL, FALSE);
-}
-
-void
-set_cursor (GtkWidget *widget)
-{
- int x, y, w, h;
-
- gdk_window_get_origin (widget->window, &x, &y);
-
- x += widget->allocation.x;
- y += widget->allocation.y;
- w = widget->allocation.width;
- h = widget->allocation.height;
-
- gdk_display_warp_pointer (gtk_widget_get_display (widget),
- gtk_widget_get_screen (widget),
- x + w / 2,
- y + h / 2);
-
- sleep_in_main_loop (0.5);
-}
-
-static gboolean
-on_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
-{
- CrossingTest *test = (CrossingTest*)user_data;
-
- CrossingEventData *evt = g_slice_new0 (CrossingEventData);
- evt->entered = TRUE;
- evt->name = g_strdup (gtk_widget_get_name (widget));
- evt->synthesized = event->send_event;
- evt->mode = event->mode;
- evt->detail = event->detail;
-
- if (!test->queue)
- test->queue = g_queue_new ();
-
- g_queue_push_tail (test->queue, evt);
-
- return FALSE;
-}
-
-static gboolean
-on_leave (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
-{
- CrossingTest *test = (CrossingTest*)user_data;
-
- CrossingEventData *evt = g_slice_new0 (CrossingEventData);
- evt->entered = FALSE;
- evt->name = g_strdup (gtk_widget_get_name (widget));
- evt->synthesized = event->send_event;
- evt->mode = event->mode;
- evt->detail = event->detail;
-
- if (!test->queue)
- test->queue = g_queue_new ();
-
- g_queue_push_tail (test->queue, evt);
-
- return FALSE;
-}
-
-static void
-on_check_toggled (GtkWidget *toggle, GtkWidget *button)
-{
- gtk_widget_set_sensitive (button, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle)));
-}
-
-static void
-sensitivity_setup (CrossingTest *test,
- gconstpointer user_data)
-{
- GtkWidget *frame;
-
- test->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_name (test->window, "W");
- frame = gtk_frame_new ("Crossing Events");
- test->eventbox = gtk_event_box_new ();
- gtk_widget_set_name (test->eventbox, "E");
-
- GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 10);
- gtk_container_add (GTK_CONTAINER (test->window), frame);
- gtk_container_add (GTK_CONTAINER (frame), test->eventbox);
- gtk_container_add (GTK_CONTAINER (test->eventbox), vbox);
-
- test->button = gtk_button_new_with_label ("Click me!");
- gtk_widget_set_name (test->button, "B");
- gtk_box_pack_start (GTK_BOX (vbox), test->button, FALSE, TRUE, 0);
-
- test->check = gtk_check_button_new_with_label ("Sensitive?");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (test->check), TRUE);
- g_signal_connect (G_OBJECT (test->check),
- "toggled", G_CALLBACK (on_check_toggled), test->button);
- gtk_widget_set_name (test->check, "C");
- gtk_box_pack_start (GTK_BOX (vbox), test->check, FALSE, TRUE, 0);
-
- gtk_widget_show_all (test->window);
-
- gtk_window_move (GTK_WINDOW (test->window), 0, 0);
-
- sleep_in_main_loop (0.5);
-}
-
-static void
-sensitivity_teardown (CrossingTest *test,
- gconstpointer user_data)
-{
- stop_events (test);
- gtk_widget_destroy (test->window);
-
- if (test->queue != NULL)
- {
- g_queue_clear (test->queue);
- test->queue = NULL;
- }
-}
-
-void
-start_events (CrossingTest *test)
-{
- if (!test->events_connected)
- {
- g_object_connect (G_OBJECT (test->window),
- "signal::destroy", gtk_main_quit, NULL,
- "signal::enter-notify-event", on_enter, test,
- "signal::leave-notify-event", on_leave, test,
- NULL);
- g_object_connect (G_OBJECT (test->eventbox),
- "signal::enter-notify-event", on_enter, test,
- "signal::leave-notify-event", on_leave, test,
- NULL);
- g_object_connect (G_OBJECT (test->button),
- "signal::enter-notify-event", on_enter, test,
- "signal::leave-notify-event", on_leave, test,
- NULL);
- g_object_connect (G_OBJECT (test->check),
- "signal::enter-notify-event", on_enter, test,
- "signal::leave-notify-event", on_leave, test,
- NULL);
- test->events_connected = TRUE;
- }
-
- sleep_in_main_loop (0.5);
-}
-
-void
-stop_events (CrossingTest *test)
-{
- if (test->events_connected)
- {
- g_object_disconnect (G_OBJECT (test->window),
- "any_signal", gtk_main_quit, NULL,
- "any_signal", on_enter, test,
- "any_signal", on_leave, test,
- NULL);
- g_object_disconnect (G_OBJECT (test->eventbox),
- "any_signal", on_enter, test,
- "any_signal", on_leave, test,
- NULL);
- g_object_disconnect (G_OBJECT (test->button),
- "any_signal", on_enter, test,
- "any_signal", on_leave, test,
- NULL);
- g_object_disconnect (G_OBJECT (test->check),
- "any_signal", G_CALLBACK (on_check_toggled), test->button,
- "any_signal", on_enter, test,
- "any_signal", on_leave, test,
- NULL);
- test->events_connected = FALSE;
- }
-}
-
-void
-move_cursor_away (CrossingTest *test)
-{
- gdk_display_warp_pointer (gtk_widget_get_display (test->window),
- gtk_widget_get_screen (test->window),
- 1000, -1000);
-
- sleep_in_main_loop (0.5);
-}
-
-void
-check_event (CrossingTest *test,
- const gchar *name,
- gboolean entered,
- gboolean synthesized,
- GdkCrossingMode mode,
- GdkNotifyType detail)
-{
- CrossingEventData *evt;
-
- g_assert (test->queue != NULL);
-
- evt = g_queue_pop_head (test->queue);
-
- g_assert (evt->entered == entered);
- g_assert (strcmp (evt->name, name) == 0);
- g_assert (evt->synthesized == synthesized);
- g_assert (evt->mode == mode);
-
- if (evt->detail != detail)
- g_print ("%s %s event, detail %d, expected detail %d\n",
- synthesized ? "synthesized" : "native",
- entered ? "enter" : "leave",
- evt->detail, detail);
-
- g_assert (evt->detail == detail);
-}
-
-/* Verify crossing events when moving into and out of a sensitive widget */
-static void
-cursor_on_sensitive (CrossingTest *test,
- gconstpointer user_data)
-{
- move_cursor_away (test);
-
- start_events (test);
-
- set_cursor (test->button);
-
- check_event (test,
- "W",
- TRUE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR_VIRTUAL);
-
- check_event (test,
- "E",
- TRUE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR_VIRTUAL);
-
- check_event (test,
- "B",
- TRUE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- move_cursor_away (test);
-
- check_event (test,
- "B",
- FALSE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- check_event (test,
- "E",
- FALSE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR_VIRTUAL);
-
- check_event (test,
- "W",
- FALSE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR_VIRTUAL);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-change_sensitive_to_insensitive (CrossingTest *test,
- gconstpointer user_data)
-{
- move_cursor_away (test);
- set_cursor (test->button);
-
- start_events (test);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (test->check), FALSE);
-
- check_event (test,
- "B",
- FALSE,
- TRUE, /* synthesized */
- GDK_CROSSING_STATE_CHANGED,
- GDK_NOTIFY_ANCESTOR);
-
- check_event (test,
- "E",
- FALSE,
- TRUE, /* synthesized */
- GDK_CROSSING_STATE_CHANGED,
- GDK_NOTIFY_VIRTUAL);
-
- check_event (test,
- "W",
- FALSE,
- TRUE, /* synthesized */
- GDK_CROSSING_STATE_CHANGED,
- GDK_NOTIFY_VIRTUAL);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-change_insensitive_to_sensitive (CrossingTest *test,
- gconstpointer user_data)
-{
- move_cursor_away (test);
- set_cursor (test->button);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (test->check), FALSE);
-
- start_events (test);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (test->check), TRUE);
-
- check_event (test,
- "W",
- TRUE,
- TRUE, /* synthesized */
- GDK_CROSSING_STATE_CHANGED,
- GDK_NOTIFY_VIRTUAL);
-
- check_event (test,
- "E",
- TRUE,
- TRUE, /* synthesized */
- GDK_CROSSING_STATE_CHANGED,
- GDK_NOTIFY_VIRTUAL);
-
- check_event (test,
- "B",
- TRUE,
- TRUE, /* synthesized */
- GDK_CROSSING_STATE_CHANGED,
- GDK_NOTIFY_ANCESTOR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-cursor_from_insensitive_to_sensitive (CrossingTest *test,
- gconstpointer user_data)
-{
- set_cursor (test->button);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (test->check), FALSE);
-
- start_events (test);
-
- set_cursor (test->check);
-
- check_event (test,
- "C",
- TRUE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-cursor_from_sensitive_to_insensitive (CrossingTest *test,
- gconstpointer user_data)
-{
- set_cursor (test->check);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (test->check), FALSE);
-
- start_events (test);
-
- set_cursor (test->button);
-
- check_event (test,
- "C",
- FALSE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-add_gtk_grab (CrossingTest *test,
- gconstpointer user_data)
-{
- set_cursor (test->button);
-
- start_events (test);
-
- gtk_grab_add (test->check);
-
- check_event (test,
- "B",
- FALSE,
- TRUE, /* synthesized */
- GDK_CROSSING_GTK_GRAB,
- GDK_NOTIFY_ANCESTOR);
-
- check_event (test,
- "E",
- FALSE,
- TRUE, /* synthesized */
- GDK_CROSSING_GTK_GRAB,
- GDK_NOTIFY_ANCESTOR);
-
- check_event (test,
- "W",
- FALSE,
- TRUE, /* synthesized */
- GDK_CROSSING_GTK_GRAB,
- GDK_NOTIFY_ANCESTOR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-remove_gtk_grab (CrossingTest *test,
- gconstpointer user_data)
-{
- set_cursor (test->button);
-
- gtk_grab_add (test->check);
-
- start_events (test);
-
- gtk_grab_remove (test->check);
-
- check_event (test,
- "B",
- TRUE,
- TRUE, /* synthesized */
- GDK_CROSSING_GTK_UNGRAB,
- GDK_NOTIFY_ANCESTOR);
-
- check_event (test,
- "E",
- TRUE,
- TRUE, /* synthesized */
- GDK_CROSSING_GTK_UNGRAB,
- GDK_NOTIFY_ANCESTOR);
-
- check_event (test,
- "W",
- TRUE,
- TRUE, /* synthesized */
- GDK_CROSSING_GTK_UNGRAB,
- GDK_NOTIFY_ANCESTOR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-cursor_from_shadowed_to_unshadowed (CrossingTest *test,
- gconstpointer user_data)
-{
- set_cursor (test->button);
-
- gtk_grab_add (test->check);
-
- start_events (test);
-
- set_cursor (test->check);
-
- check_event (test,
- "C",
- FALSE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- check_event (test,
- "C",
- TRUE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-static void
-cursor_from_unshadowed_to_shadowed (CrossingTest *test,
- gconstpointer user_data)
-{
- set_cursor (test->check);
-
- gtk_grab_add (test->check);
-
- start_events (test);
-
- set_cursor (test->button);
-
- check_event (test,
- "C",
- FALSE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- check_event (test,
- "C",
- TRUE,
- FALSE, /* native */
- GDK_CROSSING_NORMAL,
- GDK_NOTIFY_NONLINEAR);
-
- g_assert (g_queue_is_empty (test->queue));
-
- stop_events (test);
-}
-
-int
-main (int argc,
- char **argv)
-{
- gtk_test_init (&argc, &argv, NULL);
-
- g_test_add ("/crossings/cursor-on-sensitive", CrossingTest, NULL,
- sensitivity_setup, cursor_on_sensitive, sensitivity_teardown);
-
- g_test_add ("/crossings/change-sensitive-to-insensitive", CrossingTest, NULL,
- sensitivity_setup, change_sensitive_to_insensitive, sensitivity_teardown);
-
- g_test_add ("/crossings/cursor-from-insensitive-to-sensitive", CrossingTest, NULL,
- sensitivity_setup, cursor_from_insensitive_to_sensitive, sensitivity_teardown);
-
- g_test_add ("/crossings/cursor-from-sensitive-to-insensitive", CrossingTest, NULL,
- sensitivity_setup, cursor_from_sensitive_to_insensitive, sensitivity_teardown);
-
- g_test_add ("/crossings/change-insensitive-to-sensitive", CrossingTest, NULL,
- sensitivity_setup, change_insensitive_to_sensitive, sensitivity_teardown);
-
- g_test_add ("/crossings/add-gtk-grab", CrossingTest, NULL,
- sensitivity_setup, add_gtk_grab, sensitivity_teardown);
-
- g_test_add ("/crossings/remove-gtk-grab", CrossingTest, NULL,
- sensitivity_setup, remove_gtk_grab, sensitivity_teardown);
-
- g_test_add ("/crossings/cursor-from-shadowed-to-unshadowed", CrossingTest, NULL,
- sensitivity_setup, cursor_from_shadowed_to_unshadowed, sensitivity_teardown);
-
- g_test_add ("/crossings/cursor-from-unshadowed-to-shadowed", CrossingTest, NULL,
- sensitivity_setup, cursor_from_unshadowed_to_shadowed, sensitivity_teardown);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/defaultvalue.c b/gtk/tests/defaultvalue.c
deleted file mode 100644
index ce1ad3b613..0000000000
--- a/gtk/tests/defaultvalue.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* Gtk+ default value tests
- * Copyright (C) 2007 Christian Persch
- * 2007 Johan Dahlin
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkunixprint.h>
-
-static void
-check_property (const char *output,
- GParamSpec *pspec,
- GValue *value)
-{
- GValue default_value = G_VALUE_INIT;
- char *v, *dv, *msg;
-
- if (g_param_value_defaults (pspec, value))
- return;
-
- g_value_init (&default_value, G_PARAM_SPEC_VALUE_TYPE (pspec));
- g_param_value_set_default (pspec, &default_value);
-
- v = g_strdup_value_contents (value);
- dv = g_strdup_value_contents (&default_value);
-
- msg = g_strdup_printf ("%s %s.%s: %s != %s\n",
- output,
- g_type_name (pspec->owner_type),
- pspec->name,
- dv, v);
- g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__,
- G_STRFUNC, msg);
- g_free (msg);
-
- g_free (v);
- g_free (dv);
- g_value_unset (&default_value);
-}
-
-static void
-test_type (gconstpointer data)
-{
- GObjectClass *klass;
- GObject *instance;
- GParamSpec **pspecs;
- guint n_pspecs, i;
- GType type;
-
- type = * (GType *) data;
-
- if (!G_TYPE_IS_CLASSED (type))
- return;
-
- if (G_TYPE_IS_ABSTRACT (type))
- return;
-
- if (!g_type_is_a (type, G_TYPE_OBJECT))
- return;
-
- /* These can't be freely constructed/destroyed */
- if (g_type_is_a (type, GTK_TYPE_PRINT_JOB) ||
- g_type_is_a (type, GTK_TYPE_APPLICATION) ||
- g_type_is_a (type, GDK_TYPE_PIXBUF_LOADER) ||
- g_type_is_a (type, gdk_pixbuf_simple_anim_iter_get_type ()))
- return;
-
- klass = g_type_class_ref (type);
-
- if (g_type_is_a (type, GTK_TYPE_SETTINGS))
- instance = g_object_ref (gtk_settings_get_default ());
- else if (g_type_is_a (type, GDK_TYPE_WINDOW))
- {
- GdkWindowAttr attributes;
- attributes.window_type = GDK_WINDOW_TEMP;
- attributes.event_mask = 0;
- attributes.width = 100;
- attributes.height = 100;
- instance = g_object_ref (gdk_window_new (NULL, &attributes, 0));
- }
- else
- instance = g_object_new (type, NULL);
-
- if (g_type_is_a (type, G_TYPE_INITIALLY_UNOWNED))
- g_object_ref_sink (instance);
-
- pspecs = g_object_class_list_properties (klass, &n_pspecs);
- for (i = 0; i < n_pspecs; ++i)
- {
- GParamSpec *pspec = pspecs[i];
- GValue value = G_VALUE_INIT;
-
- if (pspec->owner_type != type)
- continue;
-
- if ((pspec->flags & G_PARAM_READABLE) == 0)
- continue;
-
- if (g_type_is_a (type, GDK_TYPE_DISPLAY_MANAGER) &&
- (strcmp (pspec->name, "default-display") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_ABOUT_DIALOG) &&
- (strcmp (pspec->name, "program-name") == 0))
- continue;
-
- /* These are set to the current date */
- if (g_type_is_a (type, GTK_TYPE_CALENDAR) &&
- (strcmp (pspec->name, "year") == 0 ||
- strcmp (pspec->name, "month") == 0 ||
- strcmp (pspec->name, "day") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_CELL_RENDERER_TEXT) &&
- (strcmp (pspec->name, "background-gdk") == 0 ||
- strcmp (pspec->name, "foreground-gdk") == 0 ||
- strcmp (pspec->name, "font") == 0 ||
- strcmp (pspec->name, "font-desc") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_CELL_VIEW) &&
- (strcmp (pspec->name, "background-gdk") == 0 ||
- strcmp (pspec->name, "foreground-gdk") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_COLOR_BUTTON) &&
- strcmp (pspec->name, "color") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_COLOR_SELECTION) &&
- strcmp (pspec->name, "current-color") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_COLOR_SELECTION_DIALOG) &&
- (strcmp (pspec->name, "color-selection") == 0 ||
- strcmp (pspec->name, "ok-button") == 0 ||
- strcmp (pspec->name, "help-button") == 0 ||
- strcmp (pspec->name, "cancel-button") == 0))
- continue;
-
- /* Default invisible char is determined at runtime */
- if (g_type_is_a (type, GTK_TYPE_ENTRY) &&
- (strcmp (pspec->name, "invisible-char") == 0 ||
- strcmp (pspec->name, "buffer") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_FONT_SELECTION) &&
- strcmp (pspec->name, "font") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_LAYOUT) &&
- (strcmp (pspec->name, "hadjustment") == 0 ||
- strcmp (pspec->name, "vadjustment") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_MESSAGE_DIALOG) &&
- (strcmp (pspec->name, "image") == 0 ||
- strcmp (pspec->name, "message-area") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_PANED) &&
- strcmp (pspec->name, "max-position") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_PRINT_OPERATION) &&
- strcmp (pspec->name, "job-name") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_PRINT_UNIX_DIALOG) &&
- (strcmp (pspec->name, "page-setup") == 0 ||
- strcmp (pspec->name, "print-settings") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_PROGRESS_BAR) &&
- strcmp (pspec->name, "adjustment") == 0)
- continue;
-
- /* filename value depends on $HOME */
- if (g_type_is_a (type, GTK_TYPE_RECENT_MANAGER) &&
- (strcmp (pspec->name, "filename") == 0 ||
- strcmp (pspec->name, "size") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_SCALE_BUTTON) &&
- strcmp (pspec->name, "adjustment") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_SCROLLED_WINDOW) &&
- (strcmp (pspec->name, "hadjustment") == 0 ||
- strcmp (pspec->name, "vadjustment") == 0))
- continue;
-
- /* these defaults come from XResources */
- if (g_type_is_a (type, GTK_TYPE_SETTINGS) &&
- strncmp (pspec->name, "gtk-xft-", 8) == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_SETTINGS) &&
- (strcmp (pspec->name, "color-hash") == 0 ||
- strcmp (pspec->name, "gtk-cursor-theme-name") == 0 ||
- strcmp (pspec->name, "gtk-cursor-theme-size") == 0 ||
- strcmp (pspec->name, "gtk-dnd-drag-threshold") == 0 ||
- strcmp (pspec->name, "gtk-double-click-time") == 0 ||
- strcmp (pspec->name, "gtk-fallback-icon-theme") == 0 ||
- strcmp (pspec->name, "gtk-file-chooser-backend") == 0 ||
- strcmp (pspec->name, "gtk-icon-theme-name") == 0 ||
- strcmp (pspec->name, "gtk-im-module") == 0 ||
- strcmp (pspec->name, "gtk-key-theme-name") == 0 ||
- strcmp (pspec->name, "gtk-theme-name") == 0 ||
- strcmp (pspec->name, "gtk-sound-theme-name") == 0 ||
- strcmp (pspec->name, "gtk-enable-input-feedback-sounds") == 0 ||
- strcmp (pspec->name, "gtk-enable-event-sounds") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_SPIN_BUTTON) &&
- (strcmp (pspec->name, "adjustment") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_STATUS_ICON) &&
- (strcmp (pspec->name, "size") == 0 ||
- strcmp (pspec->name, "screen") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_TEXT_BUFFER) &&
- (strcmp (pspec->name, "tag-table") == 0 ||
- strcmp (pspec->name, "copy-target-list") == 0 ||
- strcmp (pspec->name, "paste-target-list") == 0))
- continue;
-
- /* language depends on the current locale */
- if (g_type_is_a (type, GTK_TYPE_TEXT_TAG) &&
- (strcmp (pspec->name, "background-gdk") == 0 ||
- strcmp (pspec->name, "foreground-gdk") == 0 ||
- strcmp (pspec->name, "language") == 0 ||
- strcmp (pspec->name, "font") == 0 ||
- strcmp (pspec->name, "font-desc") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_TEXT_VIEW) &&
- strcmp (pspec->name, "buffer") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_TOOL_ITEM_GROUP) &&
- strcmp (pspec->name, "label-widget") == 0)
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_TREE_VIEW) &&
- (strcmp (pspec->name, "hadjustment") == 0 ||
- strcmp (pspec->name, "vadjustment") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_VIEWPORT) &&
- (strcmp (pspec->name, "hadjustment") == 0 ||
- strcmp (pspec->name, "vadjustment") == 0))
- continue;
-
- if (g_type_is_a (type, GTK_TYPE_WIDGET) &&
- (strcmp (pspec->name, "name") == 0 ||
- strcmp (pspec->name, "screen") == 0 ||
- strcmp (pspec->name, "style") == 0))
- continue;
-
- /* resize-grip-visible is determined at runtime */
- if (g_type_is_a (type, GTK_TYPE_WINDOW) &&
- (strcmp (pspec->name, "resize-grip-visible") == 0))
- continue;
-
- if (g_test_verbose ())
- g_print ("Property %s.%s\n",
- g_type_name (pspec->owner_type),
- pspec->name);
- g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
- g_object_get_property (instance, pspec->name, &value);
- check_property ("Property", pspec, &value);
- g_value_unset (&value);
- }
- g_free (pspecs);
-
- if (g_type_is_a (type, GTK_TYPE_WIDGET))
- {
- pspecs = gtk_widget_class_list_style_properties (GTK_WIDGET_CLASS (klass), &n_pspecs);
-
- for (i = 0; i < n_pspecs; ++i)
- {
- GParamSpec *pspec = pspecs[i];
- GValue value = G_VALUE_INIT;
-
- if (pspec->owner_type != type)
- continue;
-
- if ((pspec->flags & G_PARAM_READABLE) == 0)
- continue;
-
- g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
- gtk_widget_style_get_property (GTK_WIDGET (instance), pspec->name, &value);
- check_property ("Style property", pspec, &value);
- g_value_unset (&value);
- }
-
- g_free (pspecs);
- }
-
- if (g_type_is_a (type, GDK_TYPE_WINDOW))
- gdk_window_destroy (GDK_WINDOW (instance));
- else
- g_object_unref (instance);
-
- g_type_class_unref (klass);
-}
-
-int
-main (int argc, char **argv)
-{
- const GType *otypes;
- guint i;
-
- gtk_test_init (&argc, &argv);
- gtk_test_register_all_types();
-
- otypes = gtk_test_list_all_types (NULL);
- for (i = 0; otypes[i]; i++)
- {
- gchar *testname;
-
- testname = g_strdup_printf ("/Default Values/%s",
- g_type_name (otypes[i]));
- g_test_add_data_func (testname,
- &otypes[i],
- test_type);
- g_free (testname);
- }
-
- return g_test_run();
-}
diff --git a/gtk/tests/entry.c b/gtk/tests/entry.c
deleted file mode 100644
index 074f5a5886..0000000000
--- a/gtk/tests/entry.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 2011 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-static gint serial = 0;
-
-typedef struct {
- gint serial;
- gint count;
- gint start;
- gint end;
- gchar *text;
- gchar *new_text;
- gint position;
- gint length;
-} EntryData;
-
-static void
-notify (GtkEditable *editable, GParamSpec *pspec, EntryData *data)
-{
- data->serial = serial++;
- data->count++;
- data->text = gtk_editable_get_chars (editable, 0, -1);
- gtk_editable_get_selection_bounds (editable, &data->start, &data->end);
-
-#if 0
- g_print ("notify::%s\n", pspec->name);
- g_print ("\ttext: %s\n", data->text);
- g_print ("\tstart: %d\n", data->start);
- g_print ("\tend: %d\n", data->end);
-#endif
-}
-
-static void
-insert_text (GtkEditable *editable,
- const gchar *new_text,
- gint new_text_length,
- gint *position,
- EntryData *data)
-{
- data->serial = serial++;
- data->count++;
- data->text = gtk_editable_get_chars (editable, 0, -1);
- gtk_editable_get_selection_bounds (editable, &data->start, &data->end);
- data->new_text = g_strdup (new_text);
- data->position = *position;
- data->length = new_text_length;
-
-#if 0
- g_print ("insert-text \"%s\", %d\n", new_text, *position);
- g_print ("\ttext: %s\n", data->text);
- g_print ("\tstart: %d\n", data->start);
- g_print ("\tend: %d\n", data->end);
-#endif
-}
-
-static void
-delete_text (GtkEditable *editable,
- gint start_pos,
- gint end_pos,
- EntryData *data)
-{
- data->serial = serial++;
- data->count++;
- data->text = gtk_editable_get_chars (editable, 0, -1);
- gtk_editable_get_selection_bounds (editable, &data->start, &data->end);
- data->position = start_pos;
- data->length = end_pos - start_pos;
-
-#if 0
- g_print ("delete-text %d %d\n", start_pos, end_pos);
- g_print ("\ttext: %s\n", data->text);
- g_print ("\tstart: %d\n", data->start);
- g_print ("\tend: %d\n", data->end);
-#endif
-}
-
-static void
-changed (GtkEditable *editable,
- EntryData *data)
-{
- data->serial = serial++;
- data->count++;
- data->text = gtk_editable_get_chars (editable, 0, -1);
- gtk_editable_get_selection_bounds (editable, &data->start, &data->end);
-
-#if 0
- g_print ("changed\n");
- g_print ("\ttext: %s\n", data->text);
- g_print ("\tstart: %d\n", data->start);
- g_print ("\tend: %d\n", data->end);
-#endif
-}
-
-static void
-test_insert (void)
-{
- GtkWidget *entry;
- gint pos;
- EntryData data1;
- EntryData data2;
- EntryData data3;
- EntryData data4;
- EntryData data5;
- EntryData data6;
-
- entry = gtk_entry_new ();
- g_object_ref_sink (entry);
-
- gtk_entry_set_text (GTK_ENTRY (entry), "bar");
- gtk_editable_set_position (GTK_EDITABLE (entry), -1);
- pos = gtk_editable_get_position (GTK_EDITABLE (entry));
- g_assert_cmpint (pos, ==, 3);
-
- data1.count = 0;
- data2.count = 0;
- data3.count = 0;
- data4.count = 0;
- data5.count = 0;
- data6.count = 0;
- g_signal_connect (entry, "notify::cursor-position",
- G_CALLBACK (notify), &data1);
- g_signal_connect (entry, "notify::selection-bound",
- G_CALLBACK (notify), &data2);
- g_signal_connect (entry, "notify::text",
- G_CALLBACK (notify), &data3);
- g_signal_connect (entry, "insert-text",
- G_CALLBACK (insert_text), &data4);
- g_signal_connect (entry, "delete-text",
- G_CALLBACK (delete_text), &data5);
- g_signal_connect (entry, "changed",
- G_CALLBACK (changed), &data6);
-
- pos = 0;
- gtk_editable_insert_text (GTK_EDITABLE (entry), "foo", -1, &pos);
- g_assert_cmpint (pos, ==, 3);
-
- pos = gtk_editable_get_position (GTK_EDITABLE (entry));
- g_assert_cmpint (pos, ==, 6);
-
- /* Check that notification for ::text, ::cursor-position and
- * ::selection-bound happens in a consistent state after the
- * change.
- */
- g_assert_cmpint (data1.count, ==, 1);
- g_assert_cmpint (data1.start, ==, 6);
- g_assert_cmpint (data1.end, ==, 6);
- g_assert_cmpstr (data1.text, ==, "foobar");
- g_free (data1.text);
-
- g_assert_cmpint (data2.count, ==, 1);
- g_assert_cmpint (data2.start, ==, 6);
- g_assert_cmpint (data2.end, ==, 6);
- g_assert_cmpstr (data2.text, ==, "foobar");
- g_free (data2.text);
-
- g_assert_cmpint (data3.count, ==, 1);
- g_assert_cmpint (data3.start, ==, 6);
- g_assert_cmpint (data3.end, ==, 6);
- g_assert_cmpstr (data3.text, ==, "foobar");
- g_free (data3.text);
-
- /* Check that ::insert-text sees the state _before_ the insertion */
- g_assert_cmpint (data4.count, ==, 1);
- g_assert_cmpint (data4.start, ==, 3);
- g_assert_cmpint (data4.end, ==, 3);
- g_assert_cmpstr (data4.text, ==, "bar");
- g_assert_cmpint (data4.position, ==, 0);
- g_assert_cmpint (data4.length, ==, 3);
- g_assert_cmpstr (data4.new_text, ==, "foo");
- g_free (data4.text);
- g_free (data4.new_text);
-
- /* no deletion here */
- g_assert_cmpint (data5.count, ==, 0);
-
- /* Check that ::changed sees the post-change state */
- g_assert_cmpint (data6.count, ==, 1);
- g_assert_cmpint (data6.start, ==, 6);
- g_assert_cmpint (data6.end, ==, 6);
- g_assert_cmpstr (data6.text, ==, "foobar");
- g_free (data6.text);
-
- /* Now check ordering: ::insert-text comes before ::notify */
- g_assert_cmpint (data4.serial, <, data1.serial);
- g_assert_cmpint (data4.serial, <, data2.serial);
- g_assert_cmpint (data4.serial, <, data3.serial);
-
- /* ... and ::changed comes after ::notify */
- g_assert_cmpint (data6.serial, >, data1.serial);
- g_assert_cmpint (data6.serial, >, data2.serial);
- g_assert_cmpint (data6.serial, >, data3.serial);
-
- g_object_unref (entry);
-}
-
-static void
-test_delete (void)
-{
- GtkWidget *entry;
- gint pos;
- EntryData data1;
- EntryData data2;
- EntryData data3;
- EntryData data4;
- EntryData data5;
- EntryData data6;
-
- entry = gtk_entry_new ();
- g_object_ref_sink (entry);
-
- gtk_entry_set_text (GTK_ENTRY (entry), "foobar");
- gtk_editable_set_position (GTK_EDITABLE (entry), -1);
- pos = gtk_editable_get_position (GTK_EDITABLE (entry));
- g_assert_cmpint (pos, ==, 6);
-
- data1.count = 0;
- data2.count = 0;
- data3.count = 0;
- data4.count = 0;
- data5.count = 0;
- data6.count = 0;
- g_signal_connect (entry, "notify::cursor-position",
- G_CALLBACK (notify), &data1);
- g_signal_connect (entry, "notify::selection-bound",
- G_CALLBACK (notify), &data2);
- g_signal_connect (entry, "notify::text",
- G_CALLBACK (notify), &data3);
- g_signal_connect (entry, "insert-text",
- G_CALLBACK (insert_text), &data4);
- g_signal_connect (entry, "delete-text",
- G_CALLBACK (delete_text), &data5);
- g_signal_connect (entry, "changed",
- G_CALLBACK (changed), &data6);
-
- gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 3);
-
- pos = gtk_editable_get_position (GTK_EDITABLE (entry));
- g_assert_cmpint (pos, ==, 3);
-
- /* Check that notification for ::text, ::cursor-position and
- * ::selection-bound happens in a consistent state after the
- * change.
- */
- g_assert_cmpint (data1.count, ==, 1);
- g_assert_cmpint (data1.start, ==, 3);
- g_assert_cmpint (data1.end, ==, 3);
- g_assert_cmpstr (data1.text, ==, "bar");
- g_free (data1.text);
-
- g_assert_cmpint (data2.count, ==, 1);
- g_assert_cmpint (data2.start, ==, 3);
- g_assert_cmpint (data2.end, ==, 3);
- g_assert_cmpstr (data2.text, ==, "bar");
- g_free (data2.text);
-
- g_assert_cmpint (data3.count, ==, 1);
- g_assert_cmpint (data3.start, ==, 3);
- g_assert_cmpint (data3.end, ==, 3);
- g_assert_cmpstr (data3.text, ==, "bar");
- g_free (data3.text);
-
- /* no insertion here */
- g_assert_cmpint (data4.count, ==, 0);
-
- /* Check that ::delete-text sees the state _before_ the insertion */
- g_assert_cmpint (data5.count, ==, 1);
- g_assert_cmpint (data5.start, ==, 6);
- g_assert_cmpint (data5.end, ==, 6);
- g_assert_cmpstr (data5.text, ==, "foobar");
- g_assert_cmpint (data5.position, ==, 0);
- g_assert_cmpint (data5.length, ==, 3);
- g_free (data5.text);
-
- /* Check that ::changed sees the post-change state */
- g_assert_cmpint (data6.count, ==, 1);
- g_assert_cmpint (data6.start, ==, 3);
- g_assert_cmpint (data6.end, ==, 3);
- g_assert_cmpstr (data6.text, ==, "bar");
- g_free (data6.text);
-
- /* Now check ordering: ::delete-text comes before ::notify */
- g_assert_cmpint (data5.serial, <, data1.serial);
- g_assert_cmpint (data5.serial, <, data2.serial);
- g_assert_cmpint (data5.serial, <, data3.serial);
-
- /* ... and ::changed comes after ::notify */
- g_assert_cmpint (data6.serial, >, data1.serial);
- g_assert_cmpint (data6.serial, >, data2.serial);
- g_assert_cmpint (data6.serial, >, data3.serial);
- g_object_unref (entry);
-}
-
-int
-main (int argc,
- char *argv[])
-{
- gtk_test_init (&argc, &argv);
-
- g_test_add_func ("/entry/delete", test_delete);
- g_test_add_func ("/entry/insert", test_insert);
-
- return g_test_run();
-}
diff --git a/gtk/tests/expander.c b/gtk/tests/expander.c
deleted file mode 100644
index 87b915f683..0000000000
--- a/gtk/tests/expander.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2001. See the AUTHORS
- * file for a list of people on the GTK+ Team. See the ChangeLog
- * files for a list of changes. These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- */
-#include <gtk/gtk.h>
-
-static void
-test_click_expander (void)
-{
- GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test click on expander");
- GtkWidget *expander = gtk_expander_new ("Test Expander");
- GtkWidget *label = gtk_label_new ("Test Label");
- gboolean expanded;
- gboolean simsuccess;
- gtk_container_add (GTK_CONTAINER (expander), label);
- gtk_container_add (GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (window))), expander);
- gtk_widget_show (expander);
- gtk_widget_show (label);
- gtk_widget_show_now (window);
- /* check initial expander state */
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (expander));
- g_assert (!expanded);
- /* check expanding */
- simsuccess = gtk_test_widget_click (expander, 1, 0);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ()) /* let expander timeout/idle handlers update */
- gtk_main_iteration ();
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (expander));
- g_assert (expanded);
- /* check collapsing */
- simsuccess = gtk_test_widget_click (expander, 1, 0);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ()) /* let expander timeout/idle handlers update */
- gtk_main_iteration ();
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (expander));
- g_assert (!expanded);
-}
-
-static void
-test_click_content_widget (void)
-{
- GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test click on content widget");
- GtkWidget *expander = gtk_expander_new ("Test Expander");
- GtkWidget *entry = gtk_entry_new ();
- gboolean expanded;
- gboolean simsuccess;
- gtk_container_add (GTK_CONTAINER (expander), entry);
- gtk_container_add (GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (window))), expander);
- gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE);
- gtk_widget_show (expander);
- gtk_widget_show (entry);
- gtk_widget_show_now (window);
-
- /* check click on content with expander open */
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (expander));
- g_assert (expanded);
- simsuccess = gtk_test_widget_click (entry, 1, 0);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ()) /* let expander timeout/idle handlers update */
- gtk_main_iteration ();
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (expander));
- g_assert (expanded);
-}
-
-int
-main (int argc,
- char *argv[])
-{
- gtk_test_init (&argc, &argv);
- g_test_add_func ("/expander/click-expander", test_click_expander);
- g_test_add_func ("/expander/click-content-widget", test_click_content_widget);
- return g_test_run();
-}
diff --git a/gtk/tests/file-chooser-test-dir/empty b/gtk/tests/file-chooser-test-dir/empty
deleted file mode 100644
index e69de29bb2..0000000000
--- a/gtk/tests/file-chooser-test-dir/empty
+++ /dev/null
diff --git a/gtk/tests/file-chooser-test-dir/text.txt b/gtk/tests/file-chooser-test-dir/text.txt
deleted file mode 100644
index cd0875583a..0000000000
--- a/gtk/tests/file-chooser-test-dir/text.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello world!
diff --git a/gtk/tests/filechooser.c b/gtk/tests/filechooser.c
deleted file mode 100644
index 529f87d46b..0000000000
--- a/gtk/tests/filechooser.c
+++ /dev/null
@@ -1,2492 +0,0 @@
-/* GTK - The GIMP Toolkit
- * autotestfilechooser.c: Automated unit tests for the GtkFileChooser widget
- * Copyright (C) 2005, Novell, Inc.
- *
- * Authors:
- * Federico Mena-Quintero <federico@novell.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* TODO:
- *
- * - In test_reload_sequence(), test that the selection is preserved properly
- * between unmap/map.
- *
- * - More tests!
- */
-
-#define SLEEP_DURATION 100
-
-#include "config.h"
-#include <string.h>
-#include <glib/gprintf.h>
-#include <gtk/gtk.h>
-#include "gtk/gtkfilechooserdefault.h"
-#include "gtk/gtkfilechooserentry.h"
-
-#if 0
-static const char *
-get_action_name (GtkFileChooserAction action)
-{
- switch (action)
- {
- case GTK_FILE_CHOOSER_ACTION_OPEN: return "OPEN";
- case GTK_FILE_CHOOSER_ACTION_SAVE: return "SAVE";
- case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: return "SELECT_FOLDER";
- case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: return "CREATE_FOLDER";
-
- default:
- g_assert_not_reached ();
- return NULL;
- }
-}
-#endif
-
-#ifdef BROKEN_TESTS
-static void
-log_test (gboolean passed, const char *test_name, ...)
-{
- va_list args;
- char *str;
-
- va_start (args, test_name);
- str = g_strdup_vprintf (test_name, args);
- va_end (args);
-
- if (g_test_verbose())
- g_printf ("%s: %s\n", passed ? "PASSED" : "FAILED", str);
- g_free (str);
-}
-
-typedef void (* SetFilenameFn) (GtkFileChooser *chooser, gpointer data);
-typedef void (* CompareFilenameFn) (GtkFileChooser *chooser, gpointer data);
-
-struct test_set_filename_closure {
- GtkWidget *chooser;
- GtkWidget *accept_button;
- gboolean focus_button;
-};
-
-static gboolean
-set_filename_timeout_cb (gpointer data)
-{
- struct test_set_filename_closure *closure;
-
- closure = data;
-
- if (closure->focus_button)
- gtk_widget_grab_focus (closure->accept_button);
-
- gtk_button_clicked (GTK_BUTTON (closure->accept_button));
-
- return FALSE;
-}
-#endif
-
-
-static guint wait_for_idle_id = 0;
-
-static gboolean
-wait_for_idle_idle (gpointer data)
-{
- wait_for_idle_id = 0;
-
- return G_SOURCE_REMOVE;
-}
-
-static void
-wait_for_idle (void)
-{
- wait_for_idle_id = g_idle_add_full (G_PRIORITY_LOW + 100,
- wait_for_idle_idle,
- NULL, NULL);
-
- while (wait_for_idle_id)
- gtk_main_iteration ();
-}
-
-#ifdef BROKEN_TESTS
-static void
-test_set_filename (GtkFileChooserAction action,
- gboolean focus_button,
- SetFilenameFn set_filename_fn,const
- CompareFilenameFn compare_filename_fn,
- gpointer data)
-{
- GtkWidget *chooser;
- struct test_set_filename_closure closure;
- guint timeout_id;
-
- chooser = gtk_file_chooser_dialog_new ("hello", NULL, action,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
-
- closure.chooser = chooser;
- closure.accept_button = gtk_dialog_add_button (GTK_DIALOG (chooser), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT);
- closure.focus_button = focus_button;
-
- gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
-
- (* set_filename_fn) (GTK_FILE_CHOOSER (chooser), data);
-
- timeout_id = gdk_threads_add_timeout_full (G_MAXINT, SLEEP_DURATION, set_filename_timeout_cb, &closure, NULL);
- gtk_dialog_run (GTK_DIALOG (chooser));
- g_source_remove (timeout_id);
-
- (* compare_filename_fn) (GTK_FILE_CHOOSER (chooser), data);
-
- gtk_widget_destroy (chooser);
-}
-
-static void
-set_filename_cb (GtkFileChooser *chooser, gpointer data)
-{
- const char *filename;
-
- filename = data;
- gtk_file_chooser_set_filename (chooser, filename);
-}
-
-static void
-compare_filename_cb (GtkFileChooser *chooser, gpointer data)
-{
- const char *filename;
- char *out_filename;
-
- filename = data;
- out_filename = gtk_file_chooser_get_filename (chooser);
-
- g_assert_cmpstr (out_filename, ==, filename);
-
- if (out_filename)
- g_free (out_filename);
-}
-
-typedef struct
-{
- const char *test_name;
- GtkFileChooserAction action;
- const char *filename;
- gboolean focus_button;
-} TestSetFilenameSetup;
-
-static void
-test_black_box_set_filename (gconstpointer data)
-{
- const TestSetFilenameSetup *setup = data;
-
- test_set_filename (setup->action, setup->focus_button, set_filename_cb, compare_filename_cb, (char *) setup->filename);
-}
-
-struct current_name_closure {
- const char *path;
- const char *current_name;
-};
-
-static void
-set_current_name_cb (GtkFileChooser *chooser, gpointer data)
-{
- struct current_name_closure *closure;
-
- closure = data;
-
- gtk_file_chooser_set_current_folder (chooser, closure->path);
- gtk_file_chooser_set_current_name (chooser, closure->current_name);
-}
-
-static void
-compare_current_name_cb (GtkFileChooser *chooser, gpointer data)
-{
- struct current_name_closure *closure;
- char *out_filename;
- char *filename;
-
- closure = data;
-
- out_filename = gtk_file_chooser_get_filename (chooser);
-
- g_assert (out_filename != NULL);
-
- filename = g_build_filename (closure->path, closure->current_name, NULL);
- g_assert_cmpstr (filename, ==, out_filename);
-
- g_free (filename);
- g_free (out_filename);
-}
-
-typedef struct
-{
- const char *test_name;
- GtkFileChooserAction action;
- const char *current_name;
- gboolean focus_button;
-} TestSetCurrentNameSetup;
-
-static void
-test_black_box_set_current_name (gconstpointer data)
-{
- const TestSetCurrentNameSetup *setup = data;
- struct current_name_closure closure;
- char *cwd;
-
- cwd = g_get_current_dir ();
-
- closure.path = cwd;
- closure.current_name = setup->current_name;
-
- test_set_filename (setup->action, setup->focus_button, set_current_name_cb, compare_current_name_cb, &closure);
-
- g_free (cwd);
-}
-#endif
-
-/* FIXME: fails in CREATE_FOLDER mode when FOLDER_NAME == "/" */
-
-#if 0
-#define FILE_NAME "/nonexistent"
-#define FILE_NAME_2 "/nonexistent2"
-#define FOLDER_NAME "/etc"
-#define FOLDER_NAME_2 "/usr"
-#else
-#define FILE_NAME "/etc/passwd"
-#define FILE_NAME_2 "/etc/group"
-#define FOLDER_NAME "/etc"
-#define FOLDER_NAME_2 "/usr"
-#endif
-
-#define CURRENT_NAME "parangaricutirimicuaro.txt"
-#define CURRENT_NAME_FOLDER "parangaricutirimicuaro"
-
-/* https://bugzilla.novell.com/show_bug.cgi?id=184875
- * http://bugzilla.gnome.org/show_bug.cgi?id=347066
- * http://bugzilla.gnome.org/show_bug.cgi?id=346058
- */
-
-#ifdef BROKEN_TESTS
-static void
-setup_set_filename_tests (void)
-{
- static TestSetFilenameSetup tests[] =
- {
- { "/GtkFileChooser/black_box/set_filename/open/no_focus", GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, FALSE },
- { "/GtkFileChooser/black_box/set_filename/open/focus", GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, TRUE },
- { "/GtkFileChooser/black_box/set_filename/save/no_focus", GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, FALSE },
- { "/GtkFileChooser/black_box/set_filename/save/focus", GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, TRUE },
- { "/GtkFileChooser/black_box/set_filename/select_folder/no_focus", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME,FALSE },
- { "/GtkFileChooser/black_box/set_filename/select_folder/focus", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME,TRUE },
- { "/GtkFileChooser/black_box/set_filename/create_folder/no_focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME,FALSE },
- { "/GtkFileChooser/black_box/set_filename/create_folder/focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME,TRUE },
- };
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
- g_test_add_data_func (tests[i].test_name, &tests[i], test_black_box_set_filename);
-}
-
-static void
-setup_set_current_name_tests (void)
-{
- static TestSetCurrentNameSetup tests[] =
- {
- { "/GtkFileChooser/black_box/set_current_name/save/no_focus", GTK_FILE_CHOOSER_ACTION_SAVE, CURRENT_NAME, FALSE },
- { "/GtkFileChooser/black_box/set_current_name/save/focus", GTK_FILE_CHOOSER_ACTION_SAVE, CURRENT_NAME, TRUE },
- { "/GtkFileChooser/black_box/set_current_name/create_folder/no_focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, CURRENT_NAME_FOLDER, FALSE },
- { "/GtkFileChooser/black_box/set_current_name/create_folder/focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, CURRENT_NAME_FOLDER, TRUE },
- };
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (tests); i++)
- g_test_add_data_func (tests[i].test_name, &tests[i], test_black_box_set_current_name);
-}
-#endif
-
-typedef struct
-{
- const char *shortname;
- GtkFileChooserAction action;
- const char *initial_current_folder;
- const char *initial_filename;
- gboolean open_dialog;
- enum {
- BUTTON,
- DIALOG
- } what_to_tweak;
- const char *tweak_current_folder;
- const char *tweak_filename;
- gint dialog_response;
- gboolean unselect_all;
- const char *final_current_folder;
- const char *final_filename;
-} FileChooserButtonTest;
-
-static char *
-make_button_test_name (FileChooserButtonTest *t)
-{
- return g_strdup_printf ("/GtkFileChooserButton/%s", t->shortname);
-#if 0
- GString *s = g_string_new ("/GtkFileChooserButton");
-
- g_string_append_printf (s, "/%s/%s/%s/%s",
- get_action_name (t->action),
- t->initial_current_folder ? "set_initial_folder" : "no_default_folder",
- t->initial_filename ? "set_initial_filename" : "no_initial_filename",
- t->open_dialog ? "open_dialog" : "no_dialog");
-
- if (t->tweak_current_folder)
- g_string_append (s, "/tweak_current_folder");
-
- if (t->tweak_filename)
- g_string_append (s, "/tweak_filename");
-
- if (t->open_dialog)
- g_string_append_printf (s, "/%s",
- t->dialog_response == GTK_RESPONSE_ACCEPT ? "accept" : "cancel");
-
- if (t->final_current_folder)
- g_string_append (s, "/final_current_folder");
-
- if (t->final_filename)
- g_string_append (s, "/final_filename");
-
- return g_string_free (s, FALSE);
-#endif
-}
-
-static gboolean
-sleep_timeout_cb (gpointer data)
-{
- gtk_main_quit ();
- return FALSE;
-}
-
-static void
-sleep_in_main_loop (void)
-{
- guint timeout_id;
-
- timeout_id = gdk_threads_add_timeout_full (G_MAXINT, 250, sleep_timeout_cb, NULL, NULL);
- gtk_main ();
- g_source_remove (timeout_id);
-}
-
-static void
-build_children_list (GtkWidget *widget, gpointer data)
-{
- GList **list;
-
- list = data;
- *list = g_list_prepend (*list, widget);
-}
-
-static GtkWidget *
-find_child_widget_with_atk_role (GtkWidget *widget, AtkRole role)
-{
- AtkObject *accessible;
- AtkRole a_role;
-
- accessible = gtk_widget_get_accessible (widget);
- a_role = atk_object_get_role (accessible);
-
- if (a_role == role)
- return widget;
- else
- {
- GtkWidget *found_child;
-
- found_child = NULL;
-
- if (GTK_IS_CONTAINER (widget))
- {
- GList *children;
- GList *l;
-
- children = NULL;
- gtk_container_forall (GTK_CONTAINER (widget), build_children_list, &children);
-
- l = children;
-
- while (l && !found_child)
- {
- GtkWidget *child;
-
- child = GTK_WIDGET (l->data);
-
- found_child = find_child_widget_with_atk_role (child, role);
-
- l = l->next;
- }
-
- g_list_free (children);
- }
-
- return found_child;
- }
-}
-
-static const char *
-get_atk_name_for_filechooser_button (GtkFileChooserButton *button)
-{
- GtkFileChooserAction action;
- GtkWidget *widget;
- AtkObject *accessible;
-
- action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (button));
- g_assert (action == GTK_FILE_CHOOSER_ACTION_OPEN || action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-
- if (action == GTK_FILE_CHOOSER_ACTION_OPEN)
- widget = find_child_widget_with_atk_role (GTK_WIDGET (button), ATK_ROLE_PUSH_BUTTON);
- else
- widget = find_child_widget_with_atk_role (GTK_WIDGET (button), ATK_ROLE_COMBO_BOX);
-
- accessible = gtk_widget_get_accessible (widget);
- return atk_object_get_name (accessible);
-}
-
-static void
-check_that_basename_is_shown (GtkFileChooserButton *button, const char *expected_filename)
-{
- GtkFileChooserAction action;
- const char *name_on_button;
- char *expected_basename;
-
- name_on_button = get_atk_name_for_filechooser_button (button);
-
- action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (button));
- g_assert (action == GTK_FILE_CHOOSER_ACTION_OPEN || action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-
- if (expected_filename)
- expected_basename = g_path_get_basename (expected_filename);
- else
- expected_basename = NULL;
-
- if (expected_basename)
- g_assert_cmpstr (expected_basename, ==, name_on_button);
- else
- g_assert_cmpstr (name_on_button, ==, "(None)"); /* see gtkfilechooserbutton.c:FALLBACK_DISPLAY_NAME */ /* FIXME: how do we translate this? */
-
- g_free (expected_basename);
-}
-
-static const char *
-get_expected_shown_filename (GtkFileChooserAction action, const char *folder_name, const char *filename)
-{
- if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
- {
- if (filename)
- return filename;
- else
- return folder_name;
- }
- else
- return filename;
-}
-
-static GtkWidget *
-get_file_chooser_dialog_from_button (GtkFileChooserButton *button)
-{
- GtkWidget *fc_dialog;
-
- /* Give me the internal dialog, damnit */
- fc_dialog = g_object_get_qdata (G_OBJECT (button), g_quark_from_static_string ("gtk-file-chooser-delegate"));
- g_assert (GTK_IS_FILE_CHOOSER (fc_dialog));
- g_assert (GTK_IS_DIALOG (fc_dialog));
-
- return fc_dialog;
-}
-
-typedef struct {
- GtkWidget *window;
- GtkWidget *fc_button;
-} WindowAndButton;
-
-static WindowAndButton
-create_window_and_file_chooser_button (GtkFileChooserAction action)
-{
- WindowAndButton w;
-
- w.window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- w.fc_button = gtk_file_chooser_button_new (action == GTK_FILE_CHOOSER_ACTION_OPEN ? "Select a file" : "Select a folder",
- action);
- gtk_container_add (GTK_CONTAINER (w.window), w.fc_button);
-
- return w;
-}
-
-typedef struct
-{
- GObject *object;
- GHashTable *signals;
- gboolean in_main_loop;
-} SignalWatcher;
-
-typedef struct
-{
- SignalWatcher *watcher;
- char *signal_name;
- gulong id;
- gboolean emitted;
-} SignalConnection;
-
-static SignalWatcher *
-signal_watcher_new (GObject *object)
-{
- SignalWatcher *watcher = g_new0 (SignalWatcher, 1);
-
- watcher->object = g_object_ref (object);
- watcher->signals = g_hash_table_new (g_str_hash, g_str_equal);
-
- return watcher;
-}
-
-static void
-dummy_callback (GObject *object)
-{
- /* nothing */
-}
-
-static void
-marshal_notify_cb (gpointer data, GClosure *closure)
-{
- if (data)
- {
- SignalConnection *conn;
-
- conn = data;
- conn->emitted = TRUE;
-
- if (conn->watcher->in_main_loop)
- {
- gtk_main_quit ();
- conn->watcher->in_main_loop = FALSE;
- }
- }
-}
-
-static void
-signal_watcher_watch_signal (SignalWatcher *watcher, const char *signal_name)
-{
- SignalConnection *conn;
-
- conn = g_hash_table_lookup (watcher->signals, signal_name);
- if (!conn)
- {
- GClosure *closure;
-
- conn = g_new0 (SignalConnection, 1);
- conn->watcher = watcher;
- conn->signal_name = g_strdup (signal_name);
-
- closure = g_cclosure_new (G_CALLBACK (dummy_callback), NULL, NULL);
- g_closure_add_marshal_guards (closure, conn, marshal_notify_cb, NULL, marshal_notify_cb);
- conn->id = g_signal_connect_closure (watcher->object, signal_name, closure, FALSE);
- conn->emitted = FALSE;
-
- g_hash_table_insert (watcher->signals, conn->signal_name, conn);
- }
- else
- conn->emitted = FALSE;
-}
-
-static gboolean
-signal_watcher_expect (SignalWatcher *watcher, const char *signal_name, char *unused_description)
-{
- SignalConnection *conn;
- gboolean emitted;
-
- conn = g_hash_table_lookup (watcher->signals, signal_name);
- g_assert (conn != NULL);
-
- if (!conn->emitted)
- {
- guint timeout_id;
-
- timeout_id = gdk_threads_add_timeout_full (G_MAXINT, 1000, sleep_timeout_cb, NULL, NULL);
-
- watcher->in_main_loop = TRUE;
- gtk_main ();
- watcher->in_main_loop = FALSE;
-
- g_source_remove (timeout_id);
- }
-
- emitted = conn->emitted;
- conn->emitted = FALSE;
-
- return emitted;
-}
-
-static void
-destroy_connection (gpointer key, gpointer value, gpointer user_data)
-{
- SignalConnection *conn;
-
- conn = value;
- g_signal_handler_disconnect (conn->watcher->object, conn->id);
- g_free (conn->signal_name);
- g_free (conn);
-}
-
-static void
-signal_watcher_destroy (SignalWatcher *watcher)
-{
- g_hash_table_foreach (watcher->signals, destroy_connection, NULL);
- g_hash_table_destroy (watcher->signals);
- g_object_unref (watcher->object);
- g_free (watcher);
-}
-
-static void
-test_file_chooser_button_with_response (const FileChooserButtonTest *setup, gint dialog_response)
-{
- WindowAndButton w;
- SignalWatcher *watcher;
- GtkWidget *fc_dialog = NULL;
- int iterations;
- int i;
-
- w = create_window_and_file_chooser_button (setup->action);
-
- watcher = signal_watcher_new (G_OBJECT (w.fc_button));
- signal_watcher_watch_signal (watcher, "current-folder-changed");
- signal_watcher_watch_signal (watcher, "selection-changed");
-
- if (setup->initial_current_folder)
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (w.fc_button), setup->initial_current_folder);
-
- if (setup->initial_filename)
- gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (w.fc_button), setup->initial_filename);
-
- gtk_widget_show_all (w.window);
- wait_for_idle ();
-
- if (setup->initial_current_folder)
- g_assert (signal_watcher_expect (watcher, "current-folder-changed", "initial current folder"));
-
- if (setup->initial_filename)
- g_assert (signal_watcher_expect (watcher, "selection-changed", "initial filename"));
-
- check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button),
- get_expected_shown_filename (setup->action, setup->initial_current_folder, setup->initial_filename));
-
- /* If there is a dialog to be opened, we actually test going through it a
- * couple of times. This ensures that any state that the button frobs for
- * each appearance of the dialog will make sense.
- */
- if (setup->open_dialog)
- iterations = 2;
- else
- iterations = 1;
-
- for (i = 0; i < iterations; i++)
- {
- GtkFileChooser *chooser_to_tweak;
-
- if (setup->open_dialog)
- {
- GList *children;
-
- /* Hack our way into the file chooser button; get its GtkButton child and click it */
- children = gtk_container_get_children (GTK_CONTAINER (w.fc_button));
- g_assert (children && GTK_IS_BUTTON (children->data));
- gtk_button_clicked (GTK_BUTTON (children->data));
- g_list_free (children);
-
- wait_for_idle ();
-
- fc_dialog = get_file_chooser_dialog_from_button (GTK_FILE_CHOOSER_BUTTON (w.fc_button));
- }
-
- if (setup->what_to_tweak == BUTTON)
- chooser_to_tweak = GTK_FILE_CHOOSER (w.fc_button);
- else if (setup->what_to_tweak == DIALOG)
- chooser_to_tweak = GTK_FILE_CHOOSER (fc_dialog);
- else
- g_assert_not_reached ();
-
- /* Okay, now frob the button or its optional dialog */
-
- if (setup->tweak_current_folder)
- {
- if (setup->what_to_tweak == BUTTON)
- signal_watcher_watch_signal (watcher, "current-folder-changed");
-
- gtk_file_chooser_set_current_folder (chooser_to_tweak, setup->tweak_current_folder);
-
- if (setup->what_to_tweak == BUTTON)
- g_assert (signal_watcher_expect (watcher, "current-folder-changed", "tweak current folder in button"));
- }
-
- if (setup->tweak_filename)
- {
- if (setup->what_to_tweak == BUTTON)
- signal_watcher_watch_signal (watcher, "selection-changed");
-
- gtk_file_chooser_select_filename (chooser_to_tweak, setup->tweak_filename);
-
- if (setup->what_to_tweak == BUTTON)
- g_assert (signal_watcher_expect (watcher, "selection-changed", "tweak filename in button"));
- }
-
- if (setup->unselect_all)
- {
- if (setup->what_to_tweak == BUTTON)
- signal_watcher_watch_signal (watcher, "selection-changed");
-
- gtk_file_chooser_unselect_all (chooser_to_tweak);
-
- if (setup->what_to_tweak == BUTTON)
- g_assert (signal_watcher_expect (watcher, "selection-changed", "tweak unselect_all in button"));
- }
-
- wait_for_idle ();
-
- if (setup->open_dialog)
- {
- gtk_dialog_response (GTK_DIALOG (fc_dialog), dialog_response);
- wait_for_idle ();
-
- gtk_window_resize (GTK_WINDOW (fc_dialog), 500, 500);
- }
-
- if (setup->final_current_folder)
- {
- char *folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (w.fc_button));
-
- g_assert_cmpstr (folder, ==, setup->final_current_folder);
- g_free (folder);
- }
-
- if (setup->final_filename)
- {
- char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (w.fc_button));
-
- g_assert_cmpstr (filename, ==, setup->final_filename);
- g_free (filename);
- }
-
- check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button),
- get_expected_shown_filename (setup->action, setup->final_current_folder, setup->final_filename));
- }
-
- signal_watcher_destroy (watcher);
- gtk_widget_destroy (w.window);
-}
-
-static void
-test_file_chooser_button (gconstpointer data)
-{
- const FileChooserButtonTest *setup = data;
-
- test_file_chooser_button_with_response (setup, setup->dialog_response);
-
- if (setup->open_dialog && setup->dialog_response == GTK_RESPONSE_CANCEL)
- {
- /* Runs the test again, with DELETE_EVENT (as if the user closed the
- * dialog instead of using the Cancel button), since the button misbehaved
- * in that case sometimes.
- */
- test_file_chooser_button_with_response (setup, GTK_RESPONSE_DELETE_EVENT);
- }
-}
-
-static int
-find_accessible_action_num (AtkObject *object, const char *action_name)
-{
- AtkAction *action_a;
- int num_actions;
- int i;
-
- action_a = ATK_ACTION (object);
-
- num_actions = atk_action_get_n_actions (action_a);
-
- for (i = 0; i < num_actions; i++)
- if (strcmp (atk_action_get_name (action_a, i), action_name) == 0)
- return i;
-
- return -1;
-}
-
-static void
-do_accessible_action (AtkObject *object, const char *action_name)
-{
- int action_num;
-
- action_num = find_accessible_action_num (object, action_name);
- g_assert (action_num != -1);
-
- atk_action_do_action (ATK_ACTION (object), action_num);
-}
-
-static void
-test_file_chooser_button_combo_box_1 (void)
-{
- WindowAndButton w;
- GtkWidget *combo_box;
- AtkObject *combo_box_a;
- AtkObject *menu_a;
- int num_items;
- int other_index;
- AtkObject *item_a;
- GtkWidget *fc_dialog;
-
- w = create_window_and_file_chooser_button (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-
- gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (w.fc_button), FOLDER_NAME);
-
- gtk_widget_show_all (w.window);
-
- /* Get the accessible for the combo box */
-
- combo_box = find_child_widget_with_atk_role (GTK_WIDGET (w.fc_button), ATK_ROLE_COMBO_BOX);
- combo_box_a = gtk_widget_get_accessible (combo_box);
-
- /* Press the combo box to bring up the menu */
-
- do_accessible_action (combo_box_a, "press");
- sleep_in_main_loop (); /* have to wait because bringing up the menu is asynchronous... */
-
- /* Get the menu from the combo box; it's the first child */
-
- menu_a = atk_object_ref_accessible_child (combo_box_a, 0);
- g_assert (atk_object_get_role (menu_a) == ATK_ROLE_MENU);
-
- /* Check that the last item in the menu is the "Other…" one */
-
- num_items = atk_object_get_n_accessible_children (menu_a);
- g_assert (num_items > 0);
-
- other_index = num_items - 1;
-
- item_a = atk_object_ref_accessible_child (menu_a, other_index);
- g_assert_cmpstr (atk_object_get_name (item_a), ==, "Other…"); /* FIXME: how do we translate this? */
-
- /* Activate the item */
-
- do_accessible_action (item_a, "click");
-
- /* Cancel the dialog */
-
- sleep_in_main_loop ();
- fc_dialog = get_file_chooser_dialog_from_button (GTK_FILE_CHOOSER_BUTTON (w.fc_button));
-
- gtk_dialog_response (GTK_DIALOG (fc_dialog), GTK_RESPONSE_CANCEL);
-
- /* Now check the selection in the combo box */
- check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button), FOLDER_NAME);
-
- gtk_widget_destroy (w.window);
-}
-
-static void
-setup_file_chooser_button_combo_box_tests (void)
-{
- g_test_add_func ("/GtkFileChooserButton/combo_box-1", test_file_chooser_button_combo_box_1);
-}
-
-static FileChooserButtonTest button_tests[] =
- {
- /* OPEN tests without dialog */
-
- {
- "open-1",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-2",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
- {
- "open-3",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
- {
- "open-4",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME_2, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME_2 /* final_filename */
- },
- {
- "open-5",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-6",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- FOLDER_NAME_2, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME_2, /* final_current_folder */
- NULL /* final_filename */
- },
-
- /* SELECT_FOLDER tests without dialog */
-
- {
- "select-folder-1",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-2",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-3",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME_2 /* final_filename */
- },
- {
- "select-folder-4",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-5",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-6",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- FOLDER_NAME_2, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME_2 /* final_filename */
- },
- {
- "select-folder-7",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- FOLDER_NAME_2, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME_2, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-8",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- 0, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME_2 /* final_filename */
- },
-
- /* OPEN tests with dialog, cancelled
- *
- * Test names are "open-dialog-cancel-A-B", where A and B can be:
- *
- * A:
- * ni - no initial filename
- * i - initial filename
- * nf - no initial folder
- * f - initial folder
- *
- * B:
- * nt - no tweaks
- * b - tweak button
- * d - tweak dialog
- */
-
- {
- "open-dialog-cancel-ni-nt",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-dialog-cancel-ni-b",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
- {
- "open-dialog-cancel-ni-d",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-dialog-cancel-i-nt",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
- {
- "open-dialog-cancel-i-b",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME_2, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME_2 /* final_filename */
- },
- {
- "open-dialog-cancel-i-d",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME_2, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
- {
- "open-dialog-cancel-nf-nt",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-dialog-cancel-nf-b",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- FOLDER_NAME, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-dialog-cancel-nf-d",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- FOLDER_NAME, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-dialog-cancel-f-nt",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-dialog-cancel-f-b",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- FOLDER_NAME_2, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME_2, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "open-dialog-cancel-f-d",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- FOLDER_NAME_2, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
-
- /* SELECT_FOLDER tests with dialog, cancelled */
-
- {
- "select-folder-dialog-cancel-ni-nt",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-ni-b",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-dialog-cancel-ni-d",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-i-nt",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-dialog-cancel-i-b",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME_2 /* final_filename */
- },
- {
- "select-folder-dialog-cancel-i-d",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-dialog-cancel-nf-nt",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-nf-b",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- FOLDER_NAME, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-nf-d",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- FOLDER_NAME, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-f-nt",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-f-nt-2",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-dialog-cancel-f-b",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- FOLDER_NAME_2, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME_2, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-f-b-2",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME_2 /* final_filename */
- },
- {
- "select-folder-dialog-cancel-f-d",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- FOLDER_NAME_2, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "select-folder-dialog-cancel-f-d-2",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- DIALOG, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- GTK_RESPONSE_CANCEL, /* dialog_response */
- FALSE, /* unselect_all */
- FOLDER_NAME, /* final_current_folder */
- NULL /* final_filename */
- },
-
- /* OPEN tests with dialog */
-
- {
- "open-dialog-1",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
- {
- "open-dialog-2",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
- {
- "open-dialog-3",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME_2, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME_2 /* final_filename */
- },
- {
- "open-dialog-4",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FILE_NAME /* final_filename */
- },
-
- /* SELECT_FOLDER tests with dialog */
-
- {
- "select-folder-dialog-1",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-dialog-2",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME /* final_filename */
- },
- {
- "select-folder-dialog-3",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME_2 /* final_filename */
- },
- {
- "select-folder-dialog-4",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- FOLDER_NAME, /* initial_current_folder */
- NULL, /* initial_filename */
- TRUE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- GTK_RESPONSE_ACCEPT, /* dialog_response */
- FALSE, /* unselect_all */
- NULL, /* final_current_folder */
- FOLDER_NAME_2 /* final_filename */
- },
-
- /* Unselection tests */
- {
- "unselect-all-1",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- TRUE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "unselect-all-2",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- TRUE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "unselect-all-3",
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL, /* initial_current_folder */
- FILE_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FILE_NAME_2, /* tweak_filename */
- 0, /* dialog_response */
- TRUE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "unselect-all-4",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- NULL, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- TRUE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "unselect-all-5",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- NULL, /* tweak_filename */
- 0, /* dialog_response */
- TRUE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
- {
- "unselect-all-6",
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- NULL, /* initial_current_folder */
- FOLDER_NAME, /* initial_filename */
- FALSE, /* open_dialog */
- BUTTON, /* what_to_tweak */
- NULL, /* tweak_current_folder */
- FOLDER_NAME_2, /* tweak_filename */
- 0, /* dialog_response */
- TRUE, /* unselect_all */
- NULL, /* final_current_folder */
- NULL /* final_filename */
- },
-
- };
-
-static void
-setup_file_chooser_button_tests (void)
-{
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (button_tests); i++)
- {
- char *test_name;
-
- test_name = make_button_test_name (&button_tests[i]);
- g_test_add_data_func (test_name, &button_tests[i], test_file_chooser_button);
- g_free (test_name);
- }
-
- setup_file_chooser_button_combo_box_tests ();
-}
-
-#ifdef BROKEN_TESTS
-struct confirm_overwrite_closure {
- GtkWidget *chooser;
- GtkWidget *accept_button;
- gint confirm_overwrite_signal_emitted;
- gchar *extension;
-};
-
-static GtkFileChooserConfirmation
-confirm_overwrite_cb (GtkFileChooser *chooser, gpointer data)
-{
- struct confirm_overwrite_closure *closure = data;
-
- if (g_test_verbose())
- printf ("bling!\n");
- closure->confirm_overwrite_signal_emitted += 1;
-
- return GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME;
-}
-
-static void
-overwrite_response_cb (GtkFileChooser *chooser, gint response, gpointer data)
-{
- struct confirm_overwrite_closure *closure = data;
- char *filename;
-
- if (g_test_verbose())
- printf ("plong!\n");
-
- if (response != GTK_RESPONSE_ACCEPT)
- return;
-
- filename = gtk_file_chooser_get_filename (chooser);
-
- if (!g_str_has_suffix (filename, closure->extension))
- {
- char *basename;
-
- basename = g_path_get_basename (filename);
- g_free (filename);
-
- filename = g_strconcat (basename, closure->extension, NULL);
- gtk_file_chooser_set_current_name (chooser, filename);
-
- g_signal_stop_emission_by_name (chooser, "response");
- gtk_dialog_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
- }
-}
-
-static gboolean
-confirm_overwrite_timeout_cb (gpointer data)
-{
- struct confirm_overwrite_closure *closure;
-
- closure = data;
- gtk_button_clicked (GTK_BUTTON (closure->accept_button));
-
- return FALSE;
-}
-
-/* http://bugzilla.gnome.org/show_bug.cgi?id=347883 */
-static gboolean
-test_confirm_overwrite_for_path (const char *path, gboolean append_extension)
-{
- gboolean passed;
- struct confirm_overwrite_closure closure;
- char *filename;
- guint timeout_id;
-
- passed = TRUE;
-
- closure.extension = NULL;
- closure.confirm_overwrite_signal_emitted = 0;
- closure.chooser = gtk_file_chooser_dialog_new ("hello", NULL, GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
- closure.accept_button = gtk_dialog_add_button (GTK_DIALOG (closure.chooser),
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT);
- gtk_dialog_set_default_response (GTK_DIALOG (closure.chooser), GTK_RESPONSE_ACCEPT);
-
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (closure.chooser), TRUE);
-
- g_signal_connect (closure.chooser, "confirm-overwrite",
- G_CALLBACK (confirm_overwrite_cb), &closure);
-
- if (append_extension)
- {
- char *extension;
-
- filename = g_path_get_dirname (path);
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (closure.chooser), filename);
- g_free (filename);
-
- filename = g_path_get_basename (path);
- extension = strchr (filename, '.');
-
- if (extension)
- {
- closure.extension = g_strdup (extension);
- *extension = '\0';
- }
-
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (closure.chooser), filename);
- g_free (filename);
-
- g_signal_connect (closure.chooser, "response",
- G_CALLBACK (overwrite_response_cb), &closure);
- }
- else
- {
- gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (closure.chooser), path);
- }
-
- timeout_id = gdk_threads_add_timeout_full (G_MAXINT, SLEEP_DURATION, confirm_overwrite_timeout_cb, &closure, NULL);
- gtk_dialog_run (GTK_DIALOG (closure.chooser));
- g_source_remove (timeout_id);
-
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (closure.chooser));
- passed = passed && filename && (strcmp (filename, path) == 0);
- g_free (filename);
-
- gtk_widget_destroy (closure.chooser);
-
- passed = passed && (1 == closure.confirm_overwrite_signal_emitted);
-
- log_test (passed, "Confirm overwrite for %s", path);
-
- return passed;
-}
-
-static void
-test_confirm_overwrite (void)
-{
- gboolean passed = TRUE;
-
- /* first test for a file we know will always exist */
- passed = passed && test_confirm_overwrite_for_path ("/etc/passwd", FALSE);
- g_assert (passed);
- passed = passed && test_confirm_overwrite_for_path ("/etc/resolv.conf", TRUE);
- g_assert (passed);
-}
-#endif
-
-static const GtkFileChooserAction open_actions[] = {
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
-};
-
-static const GtkFileChooserAction save_actions[] = {
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
-};
-
-
-#ifdef BROKEN_TESTS
-static gboolean
-has_action (const GtkFileChooserAction *actions,
- int n_actions,
- GtkFileChooserAction sought_action)
-{
- int i;
-
- for (i = 0; i < n_actions; i++)
- if (actions[i] == sought_action)
- return TRUE;
-
- return FALSE;
-}
-
-static GtkFileChooserDefault *
-get_impl_from_dialog (GtkWidget *dialog)
-{
- GtkFileChooserDialog *d;
- GtkFileChooserDialogPrivate *dialog_priv;
- GtkFileChooserWidget *chooser_widget;
- GtkFileChooserWidgetPrivate *widget_priv;
- GtkFileChooserDefault *impl;
-
- d = GTK_FILE_CHOOSER_DIALOG (dialog);
- dialog_priv = d->priv;
- chooser_widget = GTK_FILE_CHOOSER_WIDGET (dialog_priv->widget);
- if (!chooser_widget)
- g_error ("BUG: dialog_priv->widget is not a GtkFileChooserWidget");
-
- widget_priv = chooser_widget->priv;
- impl = (GtkFileChooserDefault *) (widget_priv->impl);
- if (!impl)
- g_error ("BUG: widget_priv->impl is not a GtkFileChooserDefault");
-
- return impl;
-}
-
-static gboolean
-test_widgets_for_current_action (GtkFileChooserDialog *dialog,
- GtkFileChooserAction expected_action)
-{
- GtkFileChooserDefault *impl;
- gboolean passed;
-
- if (gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) != expected_action)
- return FALSE;
-
- impl = get_impl_from_dialog (GTK_WIDGET (dialog));
-
- g_assert (impl->action == expected_action);
-
- passed = TRUE;
-
- /* OPEN implies that the "new folder" button is hidden; otherwise it is shown */
- if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN)
- passed = passed && !gtk_widget_get_visible (impl->browse_new_folder_button);
- else
- passed = passed && gtk_widget_get_visible (impl->browse_new_folder_button);
-
- /* Check that the widgets are present/visible or not */
- if (has_action (open_actions, G_N_ELEMENTS (open_actions), impl->action))
- {
- passed = passed && (impl->save_widgets == NULL
- && (impl->location_mode == LOCATION_MODE_PATH_BAR
- ? impl->location_entry == NULL
- : impl->location_entry != NULL)
- && impl->save_folder_label == NULL
- && impl->save_folder_combo == NULL
- && impl->save_expander == NULL
- && GTK_IS_CONTAINER (impl->browse_widgets) && gtk_widget_is_drawable (impl->browse_widgets));
- }
- else if (has_action (save_actions, G_N_ELEMENTS (save_actions), impl->action))
- {
- /* FIXME: we can't use GTK_IS_FILE_CHOOSER_ENTRY() because it uses
- * _gtk_file_chooser_entry_get_type(), which is a non-exported symbol.
- * So, we just test impl->location_entry for being non-NULL
- */
- passed = passed && (GTK_IS_CONTAINER (impl->save_widgets) && gtk_widget_is_drawable (impl->save_widgets)
- && impl->location_entry != NULL && gtk_widget_is_drawable (impl->location_entry)
- && GTK_IS_LABEL (impl->save_folder_label) && gtk_widget_is_drawable (impl->save_folder_label)
- && GTK_IS_COMBO_BOX (impl->save_folder_combo) && gtk_widget_is_drawable (impl->save_folder_combo)
- && GTK_IS_EXPANDER (impl->save_expander) && gtk_widget_is_drawable (impl->save_expander)
- && GTK_IS_CONTAINER (impl->browse_widgets));
-
- /* FIXME: we are in a SAVE mode; test the visibility and sensitivity of
- * the children that change depending on the state of the expander.
- */
- }
- else
- {
- g_error ("BAD TEST: test_widgets_for_current_action() doesn't know about %s", get_action_name (impl->action));
- passed = FALSE;
- }
-
- return passed;
-}
-
-typedef gboolean (* ForeachActionCallback) (GtkFileChooserDialog *dialog,
- GtkFileChooserAction action,
- gpointer user_data);
-
-static gboolean
-foreach_action (GtkFileChooserDialog *dialog,
- ForeachActionCallback callback,
- gpointer user_data)
-{
- GEnumClass *enum_class;
- int i;
-
- enum_class = g_type_class_peek (GTK_TYPE_FILE_CHOOSER_ACTION);
- if (!enum_class)
- g_error ("BUG: get_action_name(): no GEnumClass for GTK_TYPE_FILE_CHOOSER_ACTION");
-
- for (i = 0; i < enum_class->n_values; i++)
- {
- GEnumValue *enum_value;
- GtkFileChooserAction action;
- gboolean passed;
-
- enum_value = enum_class->values + i;
- action = enum_value->value;
-
- passed = (* callback) (dialog, action, user_data);
- if (!passed)
- return FALSE;
- }
-
- return TRUE;
-}
-
-struct action_closure {
- GtkFileChooserAction from_action;
-};
-
-static gboolean
-switch_from_to_action_cb (GtkFileChooserDialog *dialog,
- GtkFileChooserAction action,
- gpointer user_data)
-{
- struct action_closure *closure;
- gboolean passed;
-
- closure = user_data;
-
- gtk_file_chooser_set_action (GTK_FILE_CHOOSER (dialog), closure->from_action);
-
- passed = test_widgets_for_current_action (dialog, closure->from_action);
- log_test (passed, "switch_from_to_action_cb(): reset to action %s", get_action_name (closure->from_action));
- if (!passed)
- return FALSE;
-
- gtk_file_chooser_set_action (GTK_FILE_CHOOSER (dialog), action);
-
- passed = test_widgets_for_current_action (dialog, action);
- log_test (passed, "switch_from_to_action_cb(): transition from %s to %s",
- get_action_name (closure->from_action),
- get_action_name (action));
- return passed;
-}
-
-static gboolean
-switch_from_action_cb (GtkFileChooserDialog *dialog,
- GtkFileChooserAction action,
- gpointer user_data)
-{
- struct action_closure closure;
-
- closure.from_action = action;
-
- return foreach_action (dialog, switch_from_to_action_cb, &closure);
-}
-
-static void
-test_action_widgets (void)
-{
- GtkWidget *dialog;
- GtkFileChooserAction action;
- gboolean passed;
-
- dialog = gtk_file_chooser_dialog_new ("Test file chooser",
- NULL,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_widget_show_now (dialog);
-
- action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog));
-
- passed = test_widgets_for_current_action (GTK_FILE_CHOOSER_DIALOG (dialog), action);
- log_test (passed, "test_action_widgets(): widgets for initial action %s", get_action_name (action));
- g_assert (passed);
-
- passed = foreach_action (GTK_FILE_CHOOSER_DIALOG (dialog), switch_from_action_cb, NULL);
- log_test (passed, "test_action_widgets(): all transitions through property change");
- g_assert (passed);
-
- gtk_widget_destroy (dialog);
-}
-#endif
-
-#ifdef BROKEN_TESTS
-static gboolean
-test_reload_sequence (gboolean set_folder_before_map)
-{
- GtkWidget *dialog;
- GtkFileChooserDefault *impl;
- gboolean passed;
- char *folder;
- char *current_working_dir;
-
- passed = TRUE;
-
- current_working_dir = g_get_current_dir ();
-
- dialog = gtk_file_chooser_dialog_new ("Test file chooser",
- NULL,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
- impl = get_impl_from_dialog (dialog);
-
- if (set_folder_before_map)
- {
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_home_dir ());
-
- wait_for_idle ();
-
- passed = passed && (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && impl->reload_state == RELOAD_HAS_FOLDER
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
-
- wait_for_idle ();
-
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
- g_free (folder);
- }
- else
- {
- /* Initially, no folder is not loaded or pending */
- passed = passed && (impl->current_folder == NULL
- && impl->sort_model == NULL
- && impl->browse_files_model == NULL
- && impl->load_state == LOAD_EMPTY
- && impl->reload_state == RELOAD_EMPTY
- && impl->load_timeout_id == 0);
-
- wait_for_idle ();
-
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
- }
-
- log_test (passed, "test_reload_sequence(): initial status");
-
- /* After mapping, it is loading some folder, either the one that was explicitly set or the default one */
-
- gtk_widget_show_now (dialog);
-
- wait_for_idle ();
-
- passed = passed && (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && impl->reload_state == RELOAD_HAS_FOLDER
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
-
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- if (set_folder_before_map)
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
- else
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
-
- g_free (folder);
-
- log_test (passed, "test_reload_sequence(): status after map");
-
- /* Unmap it; we should still have a folder */
-
- gtk_widget_hide (dialog);
-
- wait_for_idle ();
-
- passed = passed && (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
-
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- if (set_folder_before_map)
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
- else
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
-
- g_free (folder);
-
- log_test (passed, "test_reload_sequence(): status after unmap");
-
- /* Map it again! */
-
- gtk_widget_show_now (dialog);
-
- wait_for_idle ();
-
- passed = passed && (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && impl->reload_state == RELOAD_HAS_FOLDER
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
-
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- if (set_folder_before_map)
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
- else
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
-
- g_free (folder);
-
- log_test (passed, "test_reload_sequence(): status after re-map");
-
- gtk_widget_destroy (dialog);
- g_free (current_working_dir);
-
- return passed;
-}
-
-static void
-test_reload (void)
-{
- gboolean passed;
-
- passed = test_reload_sequence (FALSE);
- log_test (passed, "test_reload(): create and use the default folder");
- g_assert (passed);
-
- passed = test_reload_sequence (TRUE);
- log_test (passed, "test_reload(): set a folder explicitly before mapping");
- g_assert (passed);
-}
-
-static gboolean
-test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_dialog, gboolean set_folder_on_dialog)
-{
- gboolean passed;
- GtkWidget *window;
- GtkWidget *button;
- char *folder;
- GtkWidget *dialog;
- char *current_working_dir;
- gboolean must_have_cwd;
-
- passed = TRUE;
-
- current_working_dir = g_get_current_dir ();
- must_have_cwd = !(use_dialog && set_folder_on_dialog);
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- if (use_dialog)
- {
- dialog = gtk_file_chooser_dialog_new ("Test", NULL, action,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- NULL);
- button = gtk_file_chooser_button_new_with_dialog (dialog);
-
- if (set_folder_on_dialog)
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_home_dir ());
- }
- else
- {
- button = gtk_file_chooser_button_new ("Test", action);
- dialog = NULL; /* keep gcc happy */
- }
-
- gtk_container_add (GTK_CONTAINER (window), button);
-
- /* Pre-map; no folder is set */
- wait_for_idle ();
-
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
- if (must_have_cwd)
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
- else
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
-
- log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, pre-map, %s",
- get_action_name (action),
- use_dialog,
- set_folder_on_dialog,
- must_have_cwd ? "must have $cwd" : "must have explicit folder");
-
- /* Map; folder should be set */
-
- gtk_widget_show_all (window);
- gtk_widget_show_now (window);
-
- wait_for_idle ();
-
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
-
- if (must_have_cwd)
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
- else
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
-
- log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, mapped, %s",
- get_action_name (action),
- use_dialog,
- set_folder_on_dialog,
- must_have_cwd ? "must have $cwd" : "must have explicit folder");
- g_free (folder);
-
- /* Unmap; folder should be set */
-
- gtk_widget_hide (window);
- wait_for_idle ();
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
-
- if (must_have_cwd)
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
- else
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
-
- log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, unmapped, %s",
- get_action_name (action),
- use_dialog,
- set_folder_on_dialog,
- must_have_cwd ? "must have $cwd" : "must have explicit folder");
- g_free (folder);
-
- /* Re-map; folder should be set */
-
- gtk_widget_show_now (window);
- folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
-
- if (must_have_cwd)
- passed = passed && (g_strcmp0 (folder, current_working_dir) == 0);
- else
- passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0);
- wait_for_idle ();
- log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, re-mapped, %s",
- get_action_name (action),
- use_dialog,
- set_folder_on_dialog,
- must_have_cwd ? "must have $cwd" : "must have explicit folder");
- g_free (folder);
-
- g_free (current_working_dir);
-
- gtk_widget_destroy (window);
-
- return passed;
-}
-
-static void
-test_button_folder_states (void)
-{
- /* GtkFileChooserButton only supports OPEN and SELECT_FOLDER */
- static const GtkFileChooserAction actions_to_test[] = {
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
- };
- gboolean passed;
- int i;
-
- passed = TRUE;
-
- for (i = 0; i < G_N_ELEMENTS (actions_to_test); i++)
- {
- passed = passed && test_button_folder_states_for_action (actions_to_test[i], FALSE, FALSE);
- g_assert (passed);
- passed = passed && test_button_folder_states_for_action (actions_to_test[i], TRUE, FALSE);
- g_assert (passed);
- passed = passed && test_button_folder_states_for_action (actions_to_test[i], TRUE, TRUE);
- g_assert (passed);
- log_test (passed, "test_button_folder_states(): action %s", get_action_name (actions_to_test[i]));
- }
-
- log_test (passed, "test_button_folder_states(): all supported actions");
-}
-
-static void
-test_folder_switch_and_filters (void)
-{
- gboolean passed;
- char *cwd;
- char *base_dir;
- GFile *cwd_file;
- GFile *base_dir_file;
- GtkWidget *dialog;
- GtkFileFilter *all_filter;
- GtkFileFilter *txt_filter;
- GtkFileChooserDefault *impl;
-
- passed = TRUE;
-
- cwd = g_get_current_dir ();
- base_dir = g_build_filename (cwd, "file-chooser-test-dir", NULL);
-
- dialog = gtk_file_chooser_dialog_new ("Test", NULL, GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- NULL);
- impl = get_impl_from_dialog (dialog);
-
- cwd_file = g_file_new_for_path (cwd);
- base_dir_file = g_file_new_for_path (base_dir);
-
- passed = passed && gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), base_dir);
- g_assert (passed);
-
- /* All files filter */
-
- all_filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (all_filter, "All files");
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), all_filter);
-
- /* *.txt filter */
-
- txt_filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (all_filter, "*.txt");
- gtk_file_filter_add_pattern (txt_filter, "*.txt");
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), txt_filter);
-
- /* Test filter set */
-
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), all_filter);
- passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == all_filter);
- g_assert (passed);
-
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), txt_filter);
- passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter);
- log_test (passed, "test_folder_switch_and_filters(): set and get filter");
- g_assert (passed);
-
- gtk_widget_show (dialog);
-
- /* Test that filter is unchanged when we switch folders */
-
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd);
- sleep_in_main_loop ();
- passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter);
- g_assert (passed);
-
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), base_dir);
- sleep_in_main_loop ();
-
- g_signal_emit_by_name (impl->browse_path_bar, "path-clicked",
- cwd_file,
- base_dir_file,
- FALSE);
- sleep_in_main_loop ();
- passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter);
- log_test (passed, "test_folder_switch_and_filters(): filter after changing folder");
- g_assert (passed);
-
- /* cleanups */
- g_free (cwd);
- g_free (base_dir);
- g_object_unref (cwd_file);
- g_object_unref (base_dir_file);
-
- gtk_widget_destroy (dialog);
-
- log_test (passed, "test_folder_switch_and_filters(): all filter tests");
-}
-#endif
-
-int
-main (int argc,
- char **argv)
-{
- /* initialize test program */
- gtk_test_init (&argc, &argv);
-
- /* Register tests */
-
- setup_file_chooser_button_tests ();
-#ifdef BROKEN_TESTS
- setup_set_filename_tests ();
- setup_set_current_name_tests ();
-
- g_test_add_func ("/GtkFileChooser/confirm_overwrite", test_confirm_overwrite);
- g_test_add_func ("/GtkFileChooser/action_widgets", test_action_widgets);
- g_test_add_func ("/GtkFileChooser/reload", test_reload);
- g_test_add_func ("/GtkFileChooser/button_folder_states", test_button_folder_states);
- g_test_add_func ("/GtkFileChooser/folder_switch_and_filters", test_folder_switch_and_filters);
-#endif
-
- /* run and check selected tests */
- return g_test_run();
-}
diff --git a/gtk/tests/filtermodel.c b/gtk/tests/filtermodel.c
deleted file mode 100644
index dcacf8d587..0000000000
--- a/gtk/tests/filtermodel.c
+++ /dev/null
@@ -1,7147 +0,0 @@
-/* Extensive GtkTreeModelFilter tests.
- * Copyright (C) 2009,2011 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <string.h>
-
-#include "treemodel.h"
-#include "gtktreemodelrefcount.h"
-
-/* Left to do:
- * - Proper coverage checking to see if the unit tests cover
- * all possible cases.
- * - Check if the iterator stamp is incremented at the correct times.
- *
- * For more thorough testing:
- * - Test with randomized models.
- * - Extensively test a filter model wrapping a sort model,
- * or a sort model wrapping a filter model by:
- * # Checking structure.
- * # Checking for correct signals emissions.
- * # Checking correct reference counting.
- * # Tests should be done with the sort and filter model
- * in various filtering and sorting states.
- */
-
-
-/*
- * Model creation
- */
-
-#define LEVEL_LENGTH 5
-
-static void
-create_tree_store_set_values (GtkTreeStore *store,
- GtkTreeIter *iter,
- gboolean visible)
-{
- GtkTreePath *path;
- gchar *path_string;
-
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), iter);
- path_string = gtk_tree_path_to_string (path);
-
- gtk_tree_store_set (store, iter,
- 0, path_string,
- 1, visible,
- -1);
-
- gtk_tree_path_free (path);
- g_free (path_string);
-}
-
-static void
-create_tree_store_recurse (int depth,
- GtkTreeStore *store,
- GtkTreeIter *parent,
- gboolean visible)
-{
- int i;
-
- for (i = 0; i < LEVEL_LENGTH; i++)
- {
- GtkTreeIter iter;
-
- gtk_tree_store_insert (store, &iter, parent, i);
- create_tree_store_set_values (store, &iter, visible);
-
- if (depth > 0)
- create_tree_store_recurse (depth - 1, store, &iter, visible);
- }
-}
-
-static GtkTreeStore *
-create_tree_store (int depth,
- gboolean visible)
-{
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- create_tree_store_recurse (depth, store, NULL, visible);
-
- return store;
-}
-
-/*
- * Fixture
- */
-
-typedef struct
-{
- GtkWidget *tree_view;
-
- GtkTreeStore *store;
- GtkTreeModelFilter *filter;
-
- SignalMonitor *monitor;
-
- guint block_signals : 1;
-} FilterTest;
-
-
-static void
-filter_test_store_signal (FilterTest *fixture)
-{
- if (fixture->block_signals)
- g_signal_stop_emission_by_name (fixture->store, "row-changed");
-}
-
-
-static void
-filter_test_setup_generic (FilterTest *fixture,
- gconstpointer test_data,
- int depth,
- gboolean empty,
- gboolean unfiltered)
-{
- const GtkTreePath *vroot = test_data;
- GtkTreeModel *filter;
-
- fixture->store = create_tree_store (depth, !empty);
-
- g_signal_connect_swapped (fixture->store, "row-changed",
- G_CALLBACK (filter_test_store_signal), fixture);
-
- /* Please forgive me for casting const away. */
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (fixture->store),
- (GtkTreePath *)vroot);
- fixture->filter = GTK_TREE_MODEL_FILTER (filter);
-
- if (!unfiltered)
- gtk_tree_model_filter_set_visible_column (fixture->filter, 1);
-
- /* We need a tree view that's listening to get ref counting from that
- * side.
- */
- fixture->tree_view = gtk_tree_view_new_with_model (filter);
-
- fixture->monitor = signal_monitor_new (filter);
-}
-
-static void
-filter_test_setup_expand_root (FilterTest *fixture)
-{
- int i;
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_indices (0, -1);
-
- for (i = 0; i < LEVEL_LENGTH; i++)
- {
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view),
- path, FALSE);
- gtk_tree_path_next (path);
- }
- gtk_tree_path_free (path);
-}
-
-static void
-filter_test_setup (FilterTest *fixture,
- gconstpointer test_data)
-{
- filter_test_setup_generic (fixture, test_data, 3, FALSE, FALSE);
-}
-
-static void
-filter_test_setup_empty (FilterTest *fixture,
- gconstpointer test_data)
-{
- filter_test_setup_generic (fixture, test_data, 3, TRUE, FALSE);
-}
-
-static void
-filter_test_setup_unfiltered (FilterTest *fixture,
- gconstpointer test_data)
-{
- filter_test_setup_generic (fixture, test_data, 3, FALSE, TRUE);
-}
-
-static void
-filter_test_setup_unfiltered_root_expanded (FilterTest *fixture,
- gconstpointer test_data)
-{
- filter_test_setup_unfiltered (fixture, test_data);
- filter_test_setup_expand_root (fixture);
-}
-
-static void
-filter_test_setup_empty_unfiltered (FilterTest *fixture,
- gconstpointer test_data)
-{
- filter_test_setup_generic (fixture, test_data, 3, TRUE, TRUE);
-}
-
-static void
-filter_test_setup_empty_unfiltered_root_expanded (FilterTest *fixture,
- gconstpointer test_data)
-{
- filter_test_setup_empty_unfiltered (fixture, test_data);
- filter_test_setup_expand_root (fixture);
-}
-
-static GtkTreePath *
-strip_virtual_root (GtkTreePath *path,
- GtkTreePath *root_path)
-{
- GtkTreePath *real_path;
-
- if (root_path)
- {
- int j;
- int depth = gtk_tree_path_get_depth (path);
- int root_depth = gtk_tree_path_get_depth (root_path);
-
- real_path = gtk_tree_path_new ();
-
- for (j = 0; j < depth - root_depth; j++)
- gtk_tree_path_append_index (real_path,
- gtk_tree_path_get_indices (path)[root_depth + j]);
- }
- else
- real_path = gtk_tree_path_copy (path);
-
- return real_path;
-}
-
-static int
-count_visible (FilterTest *fixture,
- GtkTreePath *store_path)
-{
- int i;
- int n_visible = 0;
- GtkTreeIter iter;
-
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &iter, store_path);
-
- for (i = 0; i < LEVEL_LENGTH; i++)
- {
- gboolean visible;
-
- gtk_tree_model_get (GTK_TREE_MODEL (fixture->store), &iter,
- 1, &visible,
- -1);
-
- if (visible)
- n_visible++;
- }
-
- return n_visible;
-}
-
-static void
-filter_test_append_refilter_signals_recurse (FilterTest *fixture,
- GtkTreePath *store_path,
- GtkTreePath *filter_path,
- int depth,
- GtkTreePath *root_path)
-{
- int i;
- int rows_deleted = 0;
- GtkTreeIter iter;
-
- gtk_tree_path_down (store_path);
- gtk_tree_path_down (filter_path);
-
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &iter, store_path);
-
- for (i = 0; i < LEVEL_LENGTH; i++)
- {
- gboolean visible;
- GtkTreePath *real_path;
-
- gtk_tree_model_get (GTK_TREE_MODEL (fixture->store), &iter,
- 1, &visible,
- -1);
-
- if (root_path &&
- (!gtk_tree_path_is_descendant (store_path, root_path)
- || !gtk_tree_path_compare (store_path, root_path)))
- {
- if (!gtk_tree_path_compare (store_path, root_path))
- {
- if (depth > 1
- && gtk_tree_model_iter_has_child (GTK_TREE_MODEL (fixture->store),
- &iter))
- {
- GtkTreePath *store_copy;
- GtkTreePath *filter_copy;
-
- store_copy = gtk_tree_path_copy (store_path);
- filter_copy = gtk_tree_path_copy (filter_path);
- filter_test_append_refilter_signals_recurse (fixture,
- store_copy,
- filter_copy,
- depth - 1,
- root_path);
- gtk_tree_path_free (store_copy);
- gtk_tree_path_free (filter_copy);
- }
- }
-
- gtk_tree_path_next (store_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
-
- if (visible)
- gtk_tree_path_next (filter_path);
-
- continue;
- }
-
- real_path = strip_virtual_root (filter_path, root_path);
-
- if (visible)
- {
- /* This row will be inserted */
- signal_monitor_append_signal_path (fixture->monitor, ROW_CHANGED,
- real_path);
-
- if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (fixture->store),
- &iter))
- {
- signal_monitor_append_signal_path (fixture->monitor,
- ROW_HAS_CHILD_TOGGLED,
- real_path);
-
- if (depth > 1)
- {
- GtkTreePath *store_copy;
- GtkTreePath *filter_copy;
-
- store_copy = gtk_tree_path_copy (store_path);
- filter_copy = gtk_tree_path_copy (filter_path);
- filter_test_append_refilter_signals_recurse (fixture,
- store_copy,
- filter_copy,
- depth - 1,
- root_path);
- gtk_tree_path_free (store_copy);
- gtk_tree_path_free (filter_copy);
- }
- else if (depth == 1)
- {
- GtkTreePath *tmp_path;
-
- /* If all child rows are invisible, then the last row to
- * become invisible will emit row-has-child-toggled on the
- * parent.
- */
-
- tmp_path = gtk_tree_path_copy (store_path);
- gtk_tree_path_append_index (tmp_path, 0);
-
- if (count_visible (fixture, tmp_path) == 0)
- signal_monitor_append_signal_path (fixture->monitor,
- ROW_HAS_CHILD_TOGGLED,
- real_path);
-
- gtk_tree_path_free (tmp_path);
- }
- }
-
- gtk_tree_path_next (filter_path);
- }
- else
- {
- /* This row will be deleted */
- rows_deleted++;
- signal_monitor_append_signal_path (fixture->monitor, ROW_DELETED,
- real_path);
- }
-
- gtk_tree_path_free (real_path);
-
- gtk_tree_path_next (store_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- }
-
- if (rows_deleted == LEVEL_LENGTH
- && gtk_tree_path_get_depth (filter_path) > 1)
- {
- GtkTreePath *real_path;
-
- gtk_tree_path_up (store_path);
- gtk_tree_path_up (filter_path);
-
- /* A row-has-child-toggled will be emitted on the parent */
- if (!root_path
- || (root_path
- && gtk_tree_path_is_descendant (store_path, root_path)
- && gtk_tree_path_compare (store_path, root_path)))
- {
- real_path = strip_virtual_root (filter_path, root_path);
- signal_monitor_append_signal_path (fixture->monitor,
- ROW_HAS_CHILD_TOGGLED,
- real_path);
-
- gtk_tree_path_free (real_path);
- }
- }
-}
-
-static void
-filter_test_append_refilter_signals (FilterTest *fixture,
- int depth)
-{
- /* A special function that walks the tree store like the
- * model validation functions below.
- */
- GtkTreePath *path;
- GtkTreePath *filter_path;
-
- path = gtk_tree_path_new ();
- filter_path = gtk_tree_path_new ();
- filter_test_append_refilter_signals_recurse (fixture,
- path,
- filter_path,
- depth,
- NULL);
- gtk_tree_path_free (path);
- gtk_tree_path_free (filter_path);
-}
-
-static void
-filter_test_append_refilter_signals_with_vroot (FilterTest *fixture,
- int depth,
- GtkTreePath *root_path)
-{
- /* A special function that walks the tree store like the
- * model validation functions below.
- */
- GtkTreePath *path;
- GtkTreePath *filter_path;
-
- path = gtk_tree_path_new ();
- filter_path = gtk_tree_path_new ();
- filter_test_append_refilter_signals_recurse (fixture,
- path,
- filter_path,
- depth,
- root_path);
- gtk_tree_path_free (path);
- gtk_tree_path_free (filter_path);
-}
-
-static void
-filter_test_enable_filter (FilterTest *fixture)
-{
- gtk_tree_model_filter_set_visible_column (fixture->filter, 1);
- gtk_tree_model_filter_refilter (fixture->filter);
-}
-
-static void
-filter_test_block_signals (FilterTest *fixture)
-{
- fixture->block_signals = TRUE;
-}
-
-static void
-filter_test_unblock_signals (FilterTest *fixture)
-{
- fixture->block_signals = FALSE;
-}
-
-static void
-filter_test_teardown (FilterTest *fixture,
- gconstpointer test_data)
-{
- signal_monitor_free (fixture->monitor);
-
- gtk_widget_destroy (fixture->tree_view);
-
- g_object_unref (fixture->filter);
- g_object_unref (fixture->store);
-}
-
-/*
- * Model structure validation
- */
-
-static void
-check_filter_model_recurse (FilterTest *fixture,
- GtkTreePath *store_parent_path,
- GtkTreePath *filter_parent_path)
-{
- int i;
- GtkTreeIter store_iter;
- GtkTreeIter filter_iter;
- gboolean store_has_next, filter_has_next;
-
- gtk_tree_path_down (store_parent_path);
- gtk_tree_path_down (filter_parent_path);
-
- store_has_next = gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &store_iter, store_parent_path);
- filter_has_next = gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->filter),
- &filter_iter, filter_parent_path);
-
- for (i = 0; i < LEVEL_LENGTH; i++)
- {
- gboolean visible;
-
- g_return_if_fail (store_has_next == TRUE);
-
- gtk_tree_model_get (GTK_TREE_MODEL (fixture->store),
- &store_iter,
- 1, &visible,
- -1);
-
- if (visible)
- {
- GtkTreePath *tmp;
- gchar *filter_str, *store_str;
-
- g_return_if_fail (filter_has_next == TRUE);
-
- /* Verify path */
- tmp = gtk_tree_model_get_path (GTK_TREE_MODEL (fixture->filter),
- &filter_iter);
- g_return_if_fail (gtk_tree_path_compare (tmp, filter_parent_path) == 0);
-
- /* Verify model content */
- gtk_tree_model_get (GTK_TREE_MODEL (fixture->store),
- &store_iter,
- 0, &store_str,
- -1);
- gtk_tree_model_get (GTK_TREE_MODEL (fixture->filter),
- &filter_iter,
- 0, &filter_str,
- -1);
-
- g_return_if_fail (g_strcmp0 (store_str, filter_str) == 0);
-
- g_free (store_str);
- g_free (filter_str);
-
- if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (fixture->filter),
- &filter_iter))
- {
- g_return_if_fail (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (fixture->store), &store_iter));
-
- check_filter_model_recurse (fixture,
- gtk_tree_path_copy (store_parent_path),
- tmp);
- }
- else
- /* Only when we do not recurse we need to free tmp */
- gtk_tree_path_free (tmp);
-
- gtk_tree_path_next (filter_parent_path);
- filter_has_next = gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->filter), &filter_iter);
- }
-
- gtk_tree_path_next (store_parent_path);
- store_has_next = gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &store_iter);
- }
-
- /* Both models should have no more content! */
- g_return_if_fail (store_has_next == FALSE);
- g_return_if_fail (filter_has_next == FALSE);
-
- gtk_tree_path_free (store_parent_path);
- gtk_tree_path_free (filter_parent_path);
-}
-
-static void
-check_filter_model (FilterTest *fixture)
-{
- GtkTreePath *path;
-
- if (fixture->monitor)
- signal_monitor_assert_is_empty (fixture->monitor);
-
- path = gtk_tree_path_new ();
-
- check_filter_model_recurse (fixture, path, gtk_tree_path_copy (path));
-}
-
-static void
-check_filter_model_with_root (FilterTest *fixture,
- GtkTreePath *path)
-{
- if (fixture->monitor)
- signal_monitor_assert_is_empty (fixture->monitor);
-
- check_filter_model_recurse (fixture,
- gtk_tree_path_copy (path),
- gtk_tree_path_new ());
-}
-
-/* Helpers */
-
-static void
-check_level_length (GtkTreeModelFilter *filter,
- const gchar *level,
- const int expected_length)
-{
- if (!level)
- {
- int model_length;
-
- model_length = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (filter), NULL);
- g_assert_cmpint (model_length, ==, expected_length);
- }
- else
- {
- int model_length;
- gboolean retrieved_iter = FALSE;
- GtkTreeIter iter;
-
- retrieved_iter = gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (filter),
- &iter, level);
- g_return_if_fail (retrieved_iter);
- model_length = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (filter), &iter);
- g_assert_cmpint (model_length, ==, expected_length);
- }
-}
-
-static void
-set_path_visibility (FilterTest *fixture,
- const gchar *path,
- gboolean visible)
-{
- GtkTreeIter store_iter;
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &store_iter, path);
- gtk_tree_store_set (fixture->store, &store_iter,
- 1, visible,
- -1);
-}
-
-#if 0
-static void
-insert_path_with_visibility (FilterTest *fixture,
- const gchar *path_string,
- gboolean visible)
-{
- int position;
- GtkTreePath *path;
- GtkTreeIter parent, iter;
-
- path = gtk_tree_path_new_from_string (path_string);
- position = gtk_tree_path_get_indices (path)[gtk_tree_path_get_depth (path)];
- gtk_tree_path_up (path);
-
- if (gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &parent, path))
- {
- gtk_tree_store_insert (fixture->store, &iter, &parent, position);
- create_tree_store_set_values (fixture->store, &iter, visible);
- }
- gtk_tree_path_free (path);
-}
-#endif
-
-/*
- * The actual tests.
- */
-
-static void
-verify_test_suite (FilterTest *fixture,
- gconstpointer user_data)
-{
- check_filter_model (fixture);
-}
-
-static void
-verify_test_suite_vroot (FilterTest *fixture,
- gconstpointer user_data)
-{
- check_filter_model_with_root (fixture, (GtkTreePath *)user_data);
-}
-
-
-static void
-filled_hide_root_level (FilterTest *fixture,
- gconstpointer user_data)
-{
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "2");
- set_path_visibility (fixture, "2", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- set_path_visibility (fixture, "0", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "2");
- set_path_visibility (fixture, "4", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 3);
-
-
- /* Hide remaining */
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
-
- set_path_visibility (fixture, "1", FALSE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
-
- set_path_visibility (fixture, "3", FALSE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 5);
-
- check_filter_model (fixture);
-
- /* Show some */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- set_path_visibility (fixture, "1", TRUE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
-
- set_path_visibility (fixture, "3", TRUE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 3);
-
- check_filter_model (fixture);
-}
-
-static void
-filled_hide_child_levels (FilterTest *fixture,
- gconstpointer user_data)
-{
- set_path_visibility (fixture, "0:2", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
-
- set_path_visibility (fixture, "0:4", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "0:4:3", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "0:4:0", FALSE);
- set_path_visibility (fixture, "0:4:1", FALSE);
- set_path_visibility (fixture, "0:4:2", FALSE);
- set_path_visibility (fixture, "0:4:4", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
- set_path_visibility (fixture, "0:4", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, "0:3", 0);
-
- set_path_visibility (fixture, "0:2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:4", 0);
-
- /* Once 0:4:0 got inserted, 0:4 became a parent. Because 0:4 is
- * not visible, not signals are emitted.
- */
- set_path_visibility (fixture, "0:4:2", TRUE);
- set_path_visibility (fixture, "0:4:4", TRUE);
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, "0:4", 2);
-}
-
-static void
-filled_hide_child_levels_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view), path, FALSE);
- gtk_tree_path_free (path);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0:2");
- set_path_visibility (fixture, "0:2", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0:3");
- set_path_visibility (fixture, "0:4", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "0:4:3", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "0:4:0", FALSE);
- set_path_visibility (fixture, "0:4:1", FALSE);
- set_path_visibility (fixture, "0:4:2", FALSE);
- set_path_visibility (fixture, "0:4:4", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0:3");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0:3");
- set_path_visibility (fixture, "0:4", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, "0:3", 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0:2");
- set_path_visibility (fixture, "0:2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:4", 0);
-
- /* has-child-toggled for 0:4 is required. */
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0:4");
- set_path_visibility (fixture, "0:4:2", TRUE);
- set_path_visibility (fixture, "0:4:4", TRUE);
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, "0:4", 2);
-}
-
-
-static void
-filled_vroot_hide_root_level (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- /* These changes do not affect the filter's root level */
- set_path_visibility (fixture, "0", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- set_path_visibility (fixture, "4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- /* Even though we set the virtual root parent node to FALSE,
- * the virtual root contents remain.
- */
- set_path_visibility (fixture, "2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- /* No change */
- set_path_visibility (fixture, "1", FALSE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- set_path_visibility (fixture, "3", FALSE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- check_filter_model_with_root (fixture, path);
-
- /* Show some */
- set_path_visibility (fixture, "2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- set_path_visibility (fixture, "1", TRUE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- set_path_visibility (fixture, "3", TRUE);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH);
-
- check_filter_model_with_root (fixture, path);
-
- /* Now test changes in the virtual root level */
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "2");
- set_path_visibility (fixture, "2:2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "3");
- set_path_visibility (fixture, "2:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "1:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "3");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "3");
- set_path_visibility (fixture, "2:4", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
-
- set_path_visibility (fixture, "2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- set_path_visibility (fixture, "2:0", FALSE);
- set_path_visibility (fixture, "2:1", FALSE);
- set_path_visibility (fixture, "2:2", FALSE);
- set_path_visibility (fixture, "2:3", FALSE);
- set_path_visibility (fixture, "2:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- set_path_visibility (fixture, "2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- set_path_visibility (fixture, "1:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:4", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- set_path_visibility (fixture, "2:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- set_path_visibility (fixture, "2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "1");
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2");
- set_path_visibility (fixture, "2:0", TRUE);
- set_path_visibility (fixture, "2:1", TRUE);
- set_path_visibility (fixture, "2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
-}
-
-static void
-filled_vroot_hide_child_levels (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- set_path_visibility (fixture, "2:0:2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
-
- set_path_visibility (fixture, "2:0:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "2:0:4:3", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "2:0:4:0", FALSE);
- set_path_visibility (fixture, "2:0:4:1", FALSE);
- set_path_visibility (fixture, "2:0:4:2", FALSE);
- set_path_visibility (fixture, "2:0:4:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
- set_path_visibility (fixture, "2:0:4", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, "0:3", 0);
-
- set_path_visibility (fixture, "2:0:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:4", 0);
-
- /* Once 0:4:0 got inserted, 0:4 became a parent. However, 0:4 is not
- * visible, so no signal should be emitted.
- */
- set_path_visibility (fixture, "2:0:4:2", TRUE);
- set_path_visibility (fixture, "2:0:4:4", TRUE);
- check_level_length (fixture->filter, "0:4", 2);
- signal_monitor_assert_is_empty (fixture->monitor);
-}
-
-static void
-filled_vroot_hide_child_levels_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
- GtkTreePath *tmp_path;
-
- tmp_path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view), tmp_path, FALSE);
- gtk_tree_path_free (tmp_path);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0:2");
- set_path_visibility (fixture, "2:0:2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0:3");
- set_path_visibility (fixture, "2:0:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "2:0:4:3", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- set_path_visibility (fixture, "2:0:4:0", FALSE);
- set_path_visibility (fixture, "2:0:4:1", FALSE);
- set_path_visibility (fixture, "2:0:4:2", FALSE);
- set_path_visibility (fixture, "2:0:4:4", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
-
- /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0:3");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0:3");
- set_path_visibility (fixture, "2:0:4", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, "0:3", 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0:2");
- set_path_visibility (fixture, "2:0:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
- check_level_length (fixture->filter, "0:4", 0);
-
- /* Once 0:4:0 got inserted, 0:4 became a parent */
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0:4");
- set_path_visibility (fixture, "2:0:4:2", TRUE);
- set_path_visibility (fixture, "2:0:4:4", TRUE);
- check_level_length (fixture->filter, "0:4", 2);
- signal_monitor_assert_is_empty (fixture->monitor);
-}
-
-static void
-empty_show_nodes (FilterTest *fixture,
- gconstpointer user_data)
-{
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "3", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 0);
-
- set_path_visibility (fixture, "3:2:2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "3:2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 1);
- check_level_length (fixture->filter, "0:0:0", 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- set_path_visibility (fixture, "3", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "3:2:1", TRUE);
- set_path_visibility (fixture, "3", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 2);
- check_level_length (fixture->filter, "0:0:0", 0);
-}
-
-static void
-empty_show_multiple_nodes (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter;
- GtkTreePath *changed_path;
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- /* We simulate a change in visible func condition with this. The
- * visibility state of multiple nodes changes at once, we emit row-changed
- * for these nodes (and others) after that.
- */
- filter_test_block_signals (fixture);
- set_path_visibility (fixture, "3", TRUE);
- set_path_visibility (fixture, "4", TRUE);
- filter_test_unblock_signals (fixture);
-
- changed_path = gtk_tree_path_new ();
- gtk_tree_path_append_index (changed_path, 2);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &iter, changed_path);
- /* Invisible node - so no signals expected */
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_free (changed_path);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 2);
- check_level_length (fixture->filter, "0", 0);
-
- set_path_visibility (fixture, "3:2:2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 2);
- check_level_length (fixture->filter, "0", 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "3:2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 2);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 1);
- check_level_length (fixture->filter, "0:0:0", 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- set_path_visibility (fixture, "3", FALSE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "3:2:1", TRUE);
- set_path_visibility (fixture, "3", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 2);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 2);
- check_level_length (fixture->filter, "0:0:0", 0);
-}
-
-static void
-empty_vroot_show_nodes (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- set_path_visibility (fixture, "2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- set_path_visibility (fixture, "2:2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 0);
-
- set_path_visibility (fixture, "3", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- set_path_visibility (fixture, "2:2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:2:1", TRUE);
- set_path_visibility (fixture, "2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 2);
- check_level_length (fixture->filter, "0:1", 0);
-}
-
-static void
-empty_vroot_show_multiple_nodes (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter;
- GtkTreePath *changed_path;
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- /* We simulate a change in visible func condition with this. The
- * visibility state of multiple nodes changes at once, we emit row-changed
- * for these nodes (and others) after that.
- */
- filter_test_block_signals (fixture);
- set_path_visibility (fixture, "2", TRUE);
- set_path_visibility (fixture, "3", TRUE);
- filter_test_unblock_signals (fixture);
-
- changed_path = gtk_tree_path_new ();
- gtk_tree_path_append_index (changed_path, 1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &iter, changed_path);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_free (changed_path);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- set_path_visibility (fixture, "2:2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- /* Again, we simulate a call to refilter */
- filter_test_block_signals (fixture);
- set_path_visibility (fixture, "2:2", TRUE);
- set_path_visibility (fixture, "2:3", TRUE);
- filter_test_unblock_signals (fixture);
-
- changed_path = gtk_tree_path_new ();
- gtk_tree_path_append_index (changed_path, 2);
- gtk_tree_path_append_index (changed_path, 1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &iter, changed_path);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_next (changed_path);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (fixture->store),
- changed_path, &iter);
-
- gtk_tree_path_free (changed_path);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 2);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 0);
-
- set_path_visibility (fixture, "3", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 2);
-
- signal_monitor_append_signal (fixture->monitor, ROW_DELETED, "0");
- set_path_visibility (fixture, "2:2", FALSE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:2:1", TRUE);
- set_path_visibility (fixture, "2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 2);
- check_level_length (fixture->filter, "0", 2);
- check_level_length (fixture->filter, "0:1", 0);
-}
-
-
-static void
-unfiltered_hide_single (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2");
- set_path_visibility (fixture, "2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
-
- /* The view only shows the root level, so we only expect signals
- * for the root level.
- */
- filter_test_append_refilter_signals (fixture, 1);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_hide_single_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2");
- set_path_visibility (fixture, "2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
-
- filter_test_append_refilter_signals (fixture, 2);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_hide_single_child (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- /* This row is not shown, so its signal is not propagated */
- set_path_visibility (fixture, "2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- /* The view only shows the root level, so we only expect signals
- * for the root level.
- */
- filter_test_append_refilter_signals (fixture, 0);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_hide_single_child_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals (fixture, 2);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_hide_single_multi_level (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- /* This row is not shown, so its signal is not propagated */
- set_path_visibility (fixture, "2:2:2", FALSE);
-
- /* This row is not shown, so its signal is not propagated */
- set_path_visibility (fixture, "2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- /* The view only shows the root level, so we only expect signals
- * for the root level.
- */
- filter_test_append_refilter_signals (fixture, 1);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-
- set_path_visibility (fixture, "2:2", TRUE);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_hide_single_multi_level_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- /* This row is not shown, so its signal is not propagated */
- set_path_visibility (fixture, "2:2:2", FALSE);
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals (fixture, 2);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2", TRUE);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH - 1);
-}
-
-
-
-static void
-unfiltered_vroot_hide_single (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2");
- set_path_visibility (fixture, "2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
-
- /* The view only shows the root level, so we only expect signals
- * for the root level. (Though for the depth argument, we have to
- * take the virtual root into account).
- */
- filter_test_append_refilter_signals_with_vroot (fixture, 2, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_vroot_hide_single_child (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- /* Not visible, so no signal will be received. */
- set_path_visibility (fixture, "2:2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- /* The view only shows the root level, so we only expect signals
- * for the root level. (Though for the depth argument, we have to
- * take the virtual root into account).
- */
- filter_test_append_refilter_signals_with_vroot (fixture, 2, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_vroot_hide_single_child_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals_with_vroot (fixture, 3, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_vroot_hide_single_multi_level (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- /* This row is not shown, so its signal is not propagated */
- set_path_visibility (fixture, "2:2:2:2", FALSE);
-
- /* Not shown, so no signal */
- set_path_visibility (fixture, "2:2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- /* We only expect signals for the root level. The depth is 2
- * because we have to take the virtual root into account.
- */
- filter_test_append_refilter_signals_with_vroot (fixture, 2, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-
- /* Not shown, so no signal */
- set_path_visibility (fixture, "2:2:2", TRUE);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_vroot_hide_single_multi_level_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- /* This row is not shown, so its signal is not propagated */
- set_path_visibility (fixture, "2:2:2:2", FALSE);
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2:2", FALSE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals_with_vroot (fixture, 3, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
-
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2:2", TRUE);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH - 1);
-}
-
-static void
-unfiltered_show_single (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2");
- set_path_visibility (fixture, "2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
-
- /* We only expect signals for the root level */
- filter_test_append_refilter_signals (fixture, 1);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
-}
-
-static void
-unfiltered_show_single_child (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- set_path_visibility (fixture, "2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- /* We only expect signals for the root level */
- filter_test_append_refilter_signals (fixture, 1);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2", TRUE);
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
-}
-
-static void
-unfiltered_show_single_child_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals (fixture, 2);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2", TRUE);
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
-}
-
-static void
-unfiltered_show_single_multi_level (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- /* The view is not showing these rows (collapsed state), so it is not
- * referenced. The signal should not go through.
- */
- set_path_visibility (fixture, "2:2:2", TRUE);
- set_path_visibility (fixture, "2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- /* We only expect signals for the first level */
- filter_test_append_refilter_signals (fixture, 1);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 1);
-}
-
-static void
-unfiltered_show_single_multi_level_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- /* The view is not showing this row (collapsed state), so it is not
- * referenced. The signal should not go through.
- */
- set_path_visibility (fixture, "2:2:2", TRUE);
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals (fixture, 2);
- filter_test_enable_filter (fixture);
-
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2", TRUE);
- check_filter_model (fixture);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 1);
-}
-
-static void
-unfiltered_vroot_show_single (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2");
- set_path_visibility (fixture, "2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
-
- /* The view only shows the root level, so the filter model only has
- * the first two levels cached.
- */
- filter_test_append_refilter_signals_with_vroot (fixture, 2, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 1);
-}
-
-static void
-unfiltered_vroot_show_single_child (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- set_path_visibility (fixture, "2:2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- /* The view only shows the root level, so the filter model only has
- * the first two levels cached.
- */
- filter_test_append_refilter_signals_with_vroot (fixture, 2, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:2", TRUE);
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
-}
-
-static void
-unfiltered_vroot_show_single_child_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals_with_vroot (fixture, 3, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:2", TRUE);
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
-}
-
-
-static void
-unfiltered_vroot_show_single_multi_level (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- /* The view is not showing this row (collapsed state), so it is not
- * referenced. The signal should not go through.
- */
- set_path_visibility (fixture, "2:2:2:2", TRUE);
-
- set_path_visibility (fixture, "2:2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- /* We only expect signals for the root level */
- filter_test_append_refilter_signals_with_vroot (fixture, 2, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 1);
-}
-
-static void
-unfiltered_vroot_show_single_multi_level_root_expanded (FilterTest *fixture,
- gconstpointer user_data)
-
-{
- GtkTreePath *path = (GtkTreePath *)user_data;
-
- /* The view is not showing this row (collapsed state), so it is not
- * referenced. The signal should not go through.
- */
- set_path_visibility (fixture, "2:2:2:2", TRUE);
-
- signal_monitor_append_signal (fixture->monitor, ROW_CHANGED, "2:2");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "2:2");
- set_path_visibility (fixture, "2:2:2", TRUE);
-
- signal_monitor_assert_is_empty (fixture->monitor);
- check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
- check_level_length (fixture->filter, "2", LEVEL_LENGTH);
- check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
-
- filter_test_append_refilter_signals_with_vroot (fixture, 3, path);
- filter_test_enable_filter (fixture);
-
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 0);
-
- /* From here we are filtered, "2" in the real model is "0" in the filter
- * model.
- */
- signal_monitor_append_signal (fixture->monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture->monitor, ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "2:2", TRUE);
- check_filter_model_with_root (fixture, path);
- check_level_length (fixture->filter, NULL, 1);
- check_level_length (fixture->filter, "0", 1);
- check_level_length (fixture->filter, "0:0", 1);
-}
-
-static void
-unfiltered_rows_reordered_root_level (FilterTest *fixture,
- gconstpointer user_data)
-{
- int order0[] = { 1, 2, 3, 4, 0 };
- int order1[] = { 0, 2, 1, 3, 4 };
- int order2[] = { 4, 0, 1, 2, 3 };
- GtkTreeIter iter0, iter1, iter2, iter3, iter4;
- GtkTreePath *path;
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter0, "0");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter2, "2");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter3, "3");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "4");
-
- path = gtk_tree_path_new ();
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order0, 5);
- gtk_tree_store_move_after (fixture->store, &iter0, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order1, 5);
- gtk_tree_store_move_after (fixture->store, &iter2, &iter3);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order2, 5);
- gtk_tree_store_move_before (fixture->store, &iter0, &iter1);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_path_free (path);
-}
-
-static void
-unfiltered_rows_reordered_child_level (FilterTest *fixture,
- gconstpointer user_data)
-{
- int order0[] = { 1, 2, 3, 4, 0 };
- int order1[] = { 0, 2, 1, 3, 4 };
- int order2[] = { 4, 0, 1, 2, 3 };
- GtkTreeIter iter0, iter1, iter2, iter3, iter4;
- GtkTreePath *path;
-
- /* Expand row 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view), path, FALSE);
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter0, "0:0");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "0:1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter2, "0:2");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter3, "0:3");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "0:4");
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order0, 5);
- gtk_tree_store_move_after (fixture->store, &iter0, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order1, 5);
- gtk_tree_store_move_after (fixture->store, &iter2, &iter3);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order2, 5);
- gtk_tree_store_move_before (fixture->store, &iter0, &iter1);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_path_free (path);
-}
-
-static void
-filtered_rows_reordered_root_level_first_hidden (FilterTest *fixture,
- gconstpointer user_data)
-{
- int order0[] = { 1, 2, 3, 0 };
- int order1[] = { 0, 2, 1, 3 };
- int order2[] = { 3, 0, 1, 2 };
- GtkTreeIter iter1, iter2, iter3, iter4;
- GtkTreePath *path;
-
- /* Hide middle path */
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0");
- set_path_visibility (fixture, "0", FALSE);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter2, "2");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter3, "3");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "4");
-
- path = gtk_tree_path_new ();
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order0, 4);
- gtk_tree_store_move_after (fixture->store, &iter1, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order1, 4);
- gtk_tree_store_move_after (fixture->store, &iter3, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order2, 4);
- gtk_tree_store_move_before (fixture->store, &iter1, &iter2);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_path_free (path);
-}
-
-static void
-filtered_rows_reordered_root_level_middle_hidden (FilterTest *fixture,
- gconstpointer user_data)
-{
- int order0[] = { 1, 2, 3, 0 };
- int order1[] = { 0, 2, 1, 3 };
- int order2[] = { 3, 0, 1, 2 };
- GtkTreeIter iter0, iter1, iter3, iter4;
- GtkTreePath *path;
-
- /* Hide middle path */
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "2");
- set_path_visibility (fixture, "2", FALSE);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter0, "0");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter3, "3");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "4");
-
- path = gtk_tree_path_new ();
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order0, 4);
- gtk_tree_store_move_after (fixture->store, &iter0, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order1, 4);
- gtk_tree_store_move_after (fixture->store, &iter3, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order2, 4);
- gtk_tree_store_move_before (fixture->store, &iter0, &iter1);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_path_free (path);
-}
-
-static void
-filtered_rows_reordered_child_level_first_hidden (FilterTest *fixture,
- gconstpointer user_data)
-{
- int order0[] = { 1, 2, 3, 0 };
- int order1[] = { 0, 2, 1, 3 };
- int order2[] = { 3, 0, 1, 2 };
- GtkTreeIter iter1, iter2, iter3, iter4;
- GtkTreePath *path;
-
- /* Expand row 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view), path, TRUE);
-
- /* Hide middle path */
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:0");
- set_path_visibility (fixture, "0:0", FALSE);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "0:1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter2, "0:2");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter3, "0:3");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "0:4");
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order0, 4);
- gtk_tree_store_move_after (fixture->store, &iter1, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order1, 4);
- gtk_tree_store_move_after (fixture->store, &iter3, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order2, 4);
- gtk_tree_store_move_before (fixture->store, &iter1, &iter2);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_path_free (path);
-}
-
-static void
-filtered_rows_reordered_child_level_middle_hidden (FilterTest *fixture,
- gconstpointer user_data)
-{
- int order0[] = { 1, 2, 3, 0 };
- int order1[] = { 0, 2, 1, 3 };
- int order2[] = { 3, 0, 1, 2 };
- GtkTreeIter iter0, iter1, iter3, iter4;
- GtkTreePath *path;
-
- /* Expand row 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view), path, FALSE);
-
- /* Hide middle path */
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:2");
- set_path_visibility (fixture, "0:2", FALSE);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter0, "0:0");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "0:1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter3, "0:3");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "0:4");
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order0, 4);
- gtk_tree_store_move_after (fixture->store, &iter0, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order1, 4);
- gtk_tree_store_move_after (fixture->store, &iter3, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order2, 4);
- gtk_tree_store_move_before (fixture->store, &iter0, &iter1);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_path_free (path);
-}
-
-static void
-filtered_rows_reordered_child_level_4_hidden (FilterTest *fixture,
- gconstpointer user_data)
-{
- int order0[] = { 0 };
- GtkTreeIter iter1, iter4;
- GtkTreePath *path;
-
- /* Expand row 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view), path, FALSE);
-
- /* Hide last 4 paths */
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:4");
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:3");
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:2");
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:0");
- set_path_visibility (fixture, "0:4", FALSE);
- set_path_visibility (fixture, "0:3", FALSE);
- set_path_visibility (fixture, "0:2", FALSE);
- set_path_visibility (fixture, "0:0", FALSE);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "0:1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "0:4");
-
- signal_monitor_append_signal_reordered (fixture->monitor,
- ROWS_REORDERED,
- path, order0, 1);
- gtk_tree_store_move_after (fixture->store, &iter1, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_path_free (path);
-}
-
-static void
-filtered_rows_reordered_child_level_all_hidden (FilterTest *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter1, iter4;
- GtkTreePath *path;
-
- /* Expand row 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view), path, FALSE);
- gtk_tree_path_free (path);
-
- /* Hide last 4 paths */
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:4");
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:3");
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:2");
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:1");
- signal_monitor_append_signal (fixture->monitor,
- ROW_DELETED, "0:0");
- signal_monitor_append_signal (fixture->monitor,
- ROW_HAS_CHILD_TOGGLED, "0");
- set_path_visibility (fixture, "0:4", FALSE);
- set_path_visibility (fixture, "0:3", FALSE);
- set_path_visibility (fixture, "0:2", FALSE);
- set_path_visibility (fixture, "0:1", FALSE);
- set_path_visibility (fixture, "0:0", FALSE);
- signal_monitor_assert_is_empty (fixture->monitor);
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter1, "0:1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
- &iter4, "0:4");
-
- gtk_tree_store_move_after (fixture->store, &iter1, &iter4);
- signal_monitor_assert_is_empty (fixture->monitor);
-}
-
-static void
-insert_before (void)
-{
- GtkTreeStore *store;
- GtkTreeModel *filter;
- GtkWidget *tree_view;
- SignalMonitor *monitor;
- GtkTreeIter iter;
- GtkTreeIter last_iter;
- GtkTreePath *path;
-
- /* This tests two aspects of the row-inserted handling:
- * 1) If the newly inserted node was already handled by building
- * the root level, don't handle it a second time.
- * 2) Offsets of existing nodes must be updated when a new
- * node is inserted.
- */
-
- store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter),
- 1);
-
- tree_view = gtk_tree_view_new_with_model (filter);
- monitor = signal_monitor_new (filter);
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 0);
-
- /* Insert 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- signal_monitor_append_signal_path (monitor, ROW_INSERTED, path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_insert_with_values (store, &iter, NULL, 0,
- 0, "Foo", 1, TRUE, -1);
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 1);
-
- /* Insert 1 */
- path = gtk_tree_path_new_from_indices (1, -1);
- signal_monitor_append_signal_path (monitor, ROW_INSERTED, path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_insert_with_values (store, &iter, NULL, 1,
- 0, "Foo", 1, TRUE, -1);
- last_iter = iter;
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 2);
-
- /* Insert on 1 again -- invisible */
- gtk_tree_store_insert_with_values (store, &iter, NULL, 1,
- 0, "Foo", 1, FALSE, -1);
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 2);
-
- /* Insert on 1 again -- visible */
- path = gtk_tree_path_new_from_indices (1, -1);
- signal_monitor_append_signal_path (monitor, ROW_INSERTED, path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_insert_with_values (store, &iter, NULL, 1,
- 0, "Foo", 1, TRUE, -1);
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 3);
-
- /* Modify the iter that should be at the last position and check the
- * signal we get.
- */
- path = gtk_tree_path_new_from_indices (2, -1);
- signal_monitor_append_signal_path (monitor, ROW_CHANGED, path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_set (store, &last_iter, 0, "Foo changed", -1);
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 3);
-
- g_object_unref (filter);
- g_object_unref (store);
- gtk_widget_destroy (tree_view);
-}
-
-static void
-insert_child (void)
-{
- GtkTreeStore *store;
- GtkTreeModel *filter;
- GtkWidget *tree_view;
- SignalMonitor *monitor;
- GtkTreeIter parent, iter;
- GtkTreePath *path;
-
- store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- gtk_tree_store_insert_with_values (store, &parent, NULL, 0,
- 0, "Parent", 1, TRUE, -1);
-
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter),
- 1);
-
- tree_view = gtk_tree_view_new_with_model (filter);
- monitor = signal_monitor_new (filter);
-
- /* Insert child -- invisible */
- path = gtk_tree_path_new_from_indices (0, -1);
- signal_monitor_append_signal_path (monitor, ROW_HAS_CHILD_TOGGLED, path);
- /* The signal is received twice, once a pass through from GtkTreeStore
- * and one generated by GtkTreeModelFilter. Not accurate, but cannot
- * hurt.
- */
- signal_monitor_append_signal_path (monitor, ROW_HAS_CHILD_TOGGLED, path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_insert_with_values (store, &iter, &parent, 1,
- 0, "Child", 1, FALSE, -1);
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 1);
-
- /* Insert child */
- path = gtk_tree_path_new_from_indices (0, 0, -1);
- gtk_tree_path_up (path); /* 0 */
- signal_monitor_append_signal_path (monitor, ROW_HAS_CHILD_TOGGLED, path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_insert_with_values (store, &iter, &parent, 0,
- 0, "Child", 1, TRUE, -1);
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 1);
-
- /* Insert child -- invisible */
- gtk_tree_store_insert_with_values (store, &iter, &parent, 1,
- 0, "Child", 1, FALSE, -1);
-
- signal_monitor_assert_is_empty (monitor);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 1);
-
- g_object_unref (filter);
- g_object_unref (store);
- gtk_widget_destroy (tree_view);
-}
-
-
-
-static void
-remove_node (void)
-{
- GtkTreeIter iter, iter1, iter2, iter3;
- GtkListStore *list;
- GtkTreeModel *filter;
- GtkWidget *view G_GNUC_UNUSED;
-
- list = gtk_list_store_new (1, G_TYPE_INT);
- gtk_list_store_insert_with_values (list, &iter1, 0, 0, 1, -1);
- gtk_list_store_insert_with_values (list, &iter, 1, 0, 2, -1);
- gtk_list_store_insert_with_values (list, &iter, 2, 0, 3, -1);
- gtk_list_store_insert_with_values (list, &iter, 3, 0, 4, -1);
- gtk_list_store_insert_with_values (list, &iter, 4, 0, 5, -1);
- gtk_list_store_insert_with_values (list, &iter, 5, 0, 6, -1);
- gtk_list_store_insert_with_values (list, &iter2, 6, 0, 7, -1);
- gtk_list_store_insert_with_values (list, &iter3, 7, 0, 8, -1);
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (list), NULL);
- view = gtk_tree_view_new_with_model (filter);
-
- gtk_list_store_remove (list, &iter1);
- gtk_list_store_remove (list, &iter3);
- gtk_list_store_remove (list, &iter2);
-
- gtk_widget_destroy (view);
- g_object_unref (filter);
- g_object_unref (list);
-}
-
-static void
-remove_node_vroot (void)
-{
- GtkTreeIter parent, root;
- GtkTreeIter iter, iter1, iter2, iter3;
- GtkTreeStore *tree;
- GtkTreeModel *filter;
- GtkTreePath *path;
- GtkWidget *view G_GNUC_UNUSED;
-
- tree = gtk_tree_store_new (1, G_TYPE_INT);
- gtk_tree_store_insert_with_values (tree, &parent, NULL, 0, 0, 0, -1);
- gtk_tree_store_insert_with_values (tree, &root, &parent, 0, 0, 0, -1);
-
- gtk_tree_store_insert_with_values (tree, &iter1, &root, 0, 0, 1, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 1, 0, 2, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 2, 0, 3, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 3, 0, 4, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 4, 0, 5, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 5, 0, 6, -1);
- gtk_tree_store_insert_with_values (tree, &iter2, &root, 6, 0, 7, -1);
- gtk_tree_store_insert_with_values (tree, &iter3, &root, 7, 0, 8, -1);
-
- path = gtk_tree_path_new_from_indices (0, 0, -1);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (tree), path);
- gtk_tree_path_free (path);
-
- view = gtk_tree_view_new_with_model (filter);
-
- gtk_tree_store_remove (tree, &iter1);
- gtk_tree_store_remove (tree, &iter3);
- gtk_tree_store_remove (tree, &iter2);
-
- gtk_widget_destroy (view);
- g_object_unref (filter);
- g_object_unref (tree);
-}
-
-static void
-remove_vroot_ancestor (void)
-{
- GtkTreeIter parent, root;
- GtkTreeIter iter, iter1, iter2, iter3;
- GtkTreeStore *tree;
- GtkTreeModel *filter;
- GtkTreePath *path;
- GtkWidget *view G_GNUC_UNUSED;
-
- tree = gtk_tree_store_new (1, G_TYPE_INT);
- gtk_tree_store_insert_with_values (tree, &parent, NULL, 0, 0, 0, -1);
- gtk_tree_store_insert_with_values (tree, &root, &parent, 0, 0, 0, -1);
-
- gtk_tree_store_insert_with_values (tree, &iter1, &root, 0, 0, 1, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 1, 0, 2, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 2, 0, 3, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 3, 0, 4, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 4, 0, 5, -1);
- gtk_tree_store_insert_with_values (tree, &iter, &root, 5, 0, 6, -1);
- gtk_tree_store_insert_with_values (tree, &iter2, &root, 6, 0, 7, -1);
- gtk_tree_store_insert_with_values (tree, &iter3, &root, 7, 0, 8, -1);
-
- path = gtk_tree_path_new_from_indices (0, 0, -1);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (tree), path);
- gtk_tree_path_free (path);
-
- view = gtk_tree_view_new_with_model (filter);
-
- gtk_tree_store_remove (tree, &parent);
-
- gtk_widget_destroy (view);
- g_object_unref (filter);
- g_object_unref (tree);
-}
-
-static void
-ref_count_single_level (void)
-{
- GtkTreeIter iter[5];
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter[0], NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter[1], NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter[2], NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter[3], NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter[4], NULL);
-
- assert_root_level_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &iter[0], 2);
- assert_node_ref_count (ref_model, &iter[1], 1);
- assert_node_ref_count (ref_model, &iter[2], 1);
- assert_node_ref_count (ref_model, &iter[3], 1);
- assert_node_ref_count (ref_model, &iter[4], 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_node_ref_count (ref_model, &iter[0], 1);
- assert_node_ref_count (ref_model, &iter[1], 0);
- assert_node_ref_count (ref_model, &iter[2], 0);
- assert_node_ref_count (ref_model, &iter[3], 0);
- assert_node_ref_count (ref_model, &iter[4], 0);
-
- g_object_unref (filter_model);
-
- assert_node_ref_count (ref_model, &iter[0], 0);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_two_levels (void)
-{
- GtkTreeIter parent1, parent2, iter, iter_first;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_first, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- /* This is quite confusing:
- * - node 0 has a ref count of 2 because it is referenced as the
- * first node in a level and by the tree view.
- * - node 1 has a ref count of 2 because it is referenced by its
- * child level and by the tree view.
- */
- assert_root_level_referenced (ref_model, 2);
- assert_node_ref_count (ref_model, &iter_first, 1);
- assert_node_ref_count (ref_model, &iter, 0);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_first, 2);
- assert_node_ref_count (ref_model, &iter, 1);
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
-
- /* The child level is not destroyed because its parent is visible */
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_first, 1);
- assert_node_ref_count (ref_model, &iter, 0);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_first, 1);
- assert_node_ref_count (ref_model, &iter, 0);
-
- gtk_widget_destroy (tree_view);
-
- assert_root_level_referenced (ref_model, 1);
- assert_node_ref_count (ref_model, &iter_first, 1);
- assert_node_ref_count (ref_model, &iter, 0);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- /* The root level and first level remain cached, only the references on the
- * first nodes of these levels are kept.
- */
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_first, 1);
- assert_node_ref_count (ref_model, &iter, 0);
-
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_three_levels (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2, iter_parent2_first;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2_first
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2_first, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- /* This is quite confusing:
- * - node 0 has a ref count of 2 because it is referenced as the
- * first node in a level and by the tree view.
- * - node 1 has a ref count of 2 because it is referenced by its
- * child level and by the tree view.
- */
- assert_root_level_referenced (ref_model, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 2);
- assert_node_ref_count (ref_model, &iter_parent2_first, 2);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2_first, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_path_append_index (path, 1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 2);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_path_up (path);
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2_first, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_widget_destroy (tree_view);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- /* The root level and first level remain cached, only the references on the
- * first nodes of these levels are kept. Grandparent2 is the parent
- * of the first level with parent1, so grandparent2 keeps a reference
- * as well.
- */
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2_first, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_delete_row (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2, iter_parent2_first;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2_first
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2_first, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_root_level_referenced (ref_model, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 2);
- assert_node_ref_count (ref_model, &iter_parent2_first, 2);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter_parent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 2);
- assert_node_ref_count (ref_model, &iter_parent2_first, 2);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent1);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent2, 3);
- assert_level_referenced (ref_model, 2, &parent2);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
-
- gtk_widget_destroy (tree_view);
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
-
- g_object_unref (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_filter_row_length_1 (void)
-{
- GtkTreeIter level1_1;
- GtkTreeIter level2_1;
- GtkTreeIter level3_1;
- GtkTreeIter level4_1;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
-
- /* + level1_1
- * + level2_1
- * + level3_1
- * + level4_1
- *
- * Node level1_1 is expanded. This makes that levels 1 and 2 are
- * visible. Level 3 is cached because its parent is visible. Level 4
- * is not cached.
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &level1_1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level2_1, &level1_1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level3_1, &level2_1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level4_1, &level3_1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_1, 0, TRUE, -1);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 3);
- assert_node_ref_count (ref_model, &level3_1, 1);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 3);
- assert_node_ref_count (ref_model, &level3_1, 1);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- /* level3_1 has a visible parent, so the node is kept in the cache. */
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 3);
- assert_node_ref_count (ref_model, &level3_1, 1);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- /* level2_1 has a visible parent, so is kept in the cache. However,
- * the external reference should be released.
- */
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- gtk_widget_destroy (tree_view);
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level2_1, 1);
-
- g_object_unref (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 0);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_filter_row_length_1_remove_in_root_level (void)
-{
- GtkTreeIter level1_1;
- GtkTreeIter level2_1;
- GtkTreeIter level3_1;
- GtkTreeIter level4_1;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
-
- /* + level1_1
- * + level2_1
- * + level3_1
- * + level4_1
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &level1_1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level2_1, &level1_1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level3_1, &level2_1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level4_1, &level3_1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_1, 0, TRUE, -1);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 3);
- assert_node_ref_count (ref_model, &level3_1, 3);
- assert_node_ref_count (ref_model, &level4_1, 2);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- gtk_widget_destroy (tree_view);
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- g_object_unref (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 0);
- assert_node_ref_count (ref_model, &level2_1, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_filter_row_length_1_remove_in_child_level (void)
-{
- GtkTreeIter level1_1;
- GtkTreeIter level2_1;
- GtkTreeIter level3_1;
- GtkTreeIter level4_1;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
-
- /* + level1_1
- * + level2_1
- * + level3_1
- * + level4_1
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &level1_1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level2_1, &level1_1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level3_1, &level2_1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level4_1, &level3_1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_1, 0, TRUE, -1);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 3);
- assert_node_ref_count (ref_model, &level3_1, 3);
- assert_node_ref_count (ref_model, &level4_1, 2);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 3);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- gtk_widget_destroy (tree_view);
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- g_object_unref (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 0);
- assert_node_ref_count (ref_model, &level2_1, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_filter_row_length_gt_1 (void)
-{
- GtkTreeIter level1_1, level1_2;
- GtkTreeIter level2_1, level2_2;
- GtkTreeIter level3_1, level3_2;
- GtkTreeIter level4_1, level4_2;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
-
- /* + level1_1
- * + level1_2
- * + level2_1
- * + level2_2
- * + level3_1
- * + level3_2
- * + level4_1
- * + level4_2
- *
- * Node level1_2 is expanded. This makes that levels 1 and 2 are
- * visible. Level 3 is cached because its parent is visible. Level 4
- * is not cached.
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &level1_1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level1_2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level2_1, &level1_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level2_2, &level1_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level3_1, &level2_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level3_2, &level2_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level4_1, &level3_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level4_2, &level3_2);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_2, 0, TRUE, -1);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level2_2, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 2);
- assert_node_ref_count (ref_model, &level2_2, 2);
- assert_node_ref_count (ref_model, &level3_1, 1);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 2);
- assert_node_ref_count (ref_model, &level2_2, 2);
- assert_node_ref_count (ref_model, &level3_1, 1);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 2);
- assert_node_ref_count (ref_model, &level2_2, 2);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 1);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 2);
- assert_node_ref_count (ref_model, &level2_2, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 0);
- assert_node_ref_count (ref_model, &level2_1, 0);
- assert_node_ref_count (ref_model, &level2_2, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- gtk_widget_destroy (tree_view);
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &level1_1, 1);
-
- g_object_unref (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 0);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_filter_row_length_gt_1_visible_children (void)
-{
- GtkTreeIter level1_1, level1_2;
- GtkTreeIter level2_1, level2_2;
- GtkTreeIter level3_1, level3_2;
- GtkTreeIter level4_1, level4_2;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
-
- /* + level1_1
- * + level1_2
- * + level2_1
- * + level2_2
- * + level3_1
- * + level3_2
- * + level4_1
- * + level4_2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &level1_1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level1_2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level2_1, &level1_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level2_2, &level1_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level3_1, &level2_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level3_2, &level2_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level4_1, &level3_2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &level4_2, &level3_2);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level1_2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level3_2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &level4_2, 0, TRUE, -1);
-
- assert_entire_model_unreferenced (ref_model);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level2_2, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 2);
- assert_node_ref_count (ref_model, &level2_2, 2);
- assert_node_ref_count (ref_model, &level3_1, 2);
- assert_node_ref_count (ref_model, &level3_2, 2);
- assert_node_ref_count (ref_model, &level4_1, 2);
- assert_node_ref_count (ref_model, &level4_2, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &level2_2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &level1_1, 2);
- assert_node_ref_count (ref_model, &level1_2, 2);
- assert_node_ref_count (ref_model, &level2_1, 2);
- assert_node_ref_count (ref_model, &level2_2, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- gtk_widget_destroy (tree_view);
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- assert_node_ref_count (ref_model, &level1_1, 1);
- assert_node_ref_count (ref_model, &level1_2, 1);
- assert_node_ref_count (ref_model, &level2_1, 1);
- assert_node_ref_count (ref_model, &level2_2, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- g_object_unref (filter_model);
-
- assert_node_ref_count (ref_model, &level1_1, 0);
- assert_node_ref_count (ref_model, &level1_2, 0);
- assert_node_ref_count (ref_model, &level2_1, 0);
- assert_node_ref_count (ref_model, &level2_2, 0);
- assert_node_ref_count (ref_model, &level3_1, 0);
- assert_node_ref_count (ref_model, &level3_2, 0);
- assert_node_ref_count (ref_model, &level4_1, 0);
- assert_node_ref_count (ref_model, &level4_2, 0);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_cleanup (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2, iter_parent2_first;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2_first
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2_first, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 3);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 2);
- assert_node_ref_count (ref_model, &iter_parent2_first, 2);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- /* The root level and first level remain cached, only the references on the
- * first nodes of these levels are kept. Grandparent2 is the parent
- * of the first level with parent1, so grandparent2 keeps a reference
- * as well.
- */
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2_first, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_row_ref (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2, iter_parent2_first;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GtkTreePath *path;
- GtkTreeRowReference *row_ref;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2_first, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
- row_ref = gtk_tree_row_reference_new (filter_model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
- row_ref = gtk_tree_row_reference_new (filter_model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2_first, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
-
- gtk_widget_destroy (tree_view);
-
- gtk_tree_model_filter_clear_cache (GTK_TREE_MODEL_FILTER (filter_model));
-
- /* The root level and first level remain cached, only the references on the
- * first nodes of these levels are kept. Grandparent2 is the parent
- * of the first level with parent1, so grandparent2 keeps a reference
- * as well.
- */
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 1);
-
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_root_level_insert (void)
-{
- GtkTreeIter grandparent1, grandparent2, grandparent3;
- GtkTreeIter new_node;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + grandparent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent3, NULL);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- gtk_tree_store_prepend (GTK_TREE_STORE (model), &new_node, NULL);
-
- assert_node_ref_count (ref_model, &new_node, 2);
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_root_level_remove (void)
-{
- GtkTreeIter grandparent1, grandparent2, grandparent3;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + grandparent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent3, NULL);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent1);
-
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
-
- assert_node_ref_count (ref_model, &grandparent3, 2);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_root_level_remove_filtered (void)
-{
- GtkTreeIter grandparent1, grandparent2, grandparent3, grandparent4;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- /* + grandparent1
- * + grandparent2
- * + grandparent3
- * + grandparent4
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent3, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent4, NULL);
-
- /* Filter first node */
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, FALSE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent3, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent4, 0, TRUE, -1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent3, 2);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent4, 2);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent4);
-
- /* Check level length to get root level cached again */
- check_level_length (GTK_TREE_MODEL_FILTER (filter_model), NULL, 0);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter_model), NULL, 1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_root_level_reordered (void)
-{
- GtkTreeIter grandparent1, grandparent2, grandparent3;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + grandparent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent3, NULL);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &grandparent1, &grandparent3);
-
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
- assert_node_ref_count (ref_model, &grandparent1, 1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_root_level_reordered_filtered (void)
-{
- GtkTreeIter grandparent1, grandparent2, grandparent3;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- /* + grandparent1
- * + grandparent2
- * + grandparent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent3, NULL);
-
- /* Test with 1 node filtered */
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent3, 0, TRUE, -1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- /* Move the invisible node grandparent1 */
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &grandparent1, &grandparent3);
-
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
- assert_node_ref_count (ref_model, &grandparent1, 0);
-
- /* Move the invisible node grandparent1 */
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_before (GTK_TREE_STORE (model),
- &grandparent1, &grandparent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- /* Now swap grandparent2 and grandparent3, first reference must transfer */
- /* gtk_tree_store_swap() will emit rows-reordered */
- gtk_tree_store_swap (GTK_TREE_STORE (model),
- &grandparent2, &grandparent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent3, 2);
- assert_node_ref_count (ref_model, &grandparent2, 1);
-
- /* Swap back */
- gtk_tree_store_swap (GTK_TREE_STORE (model),
- &grandparent2, &grandparent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 1);
-
- /* Test with two nodes filtered */
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, FALSE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 2);
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_before (GTK_TREE_STORE (model),
- &grandparent3, &grandparent1);
-
- assert_node_ref_count (ref_model, &grandparent3, 2);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent1, 0);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_root_level_filter (void)
-{
- GtkTreeIter grandparent1, grandparent2, grandparent3, grandparent4;
- GtkTreeIter new_node;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- /* + grandparent1
- * + grandparent2
- * + grandparent3
- * + grandparent4
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent3, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent4, NULL);
-
- /* Filter first node */
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, FALSE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent3, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent4, 0, TRUE, -1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 1);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 2);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent3, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 2);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent4, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_prepend (GTK_TREE_STORE (model), &new_node, NULL);
-
- assert_node_ref_count (ref_model, &new_node, 0);
- assert_node_ref_count (ref_model, &grandparent1, 2);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &new_node, 0);
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &new_node);
- gtk_tree_store_prepend (GTK_TREE_STORE (model), &new_node, NULL);
-
- assert_node_ref_count (ref_model, &new_node, 0);
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &new_node, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &new_node, 2);
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
- gtk_tree_store_remove (GTK_TREE_STORE (model), &new_node);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent4, 0, TRUE, -1);
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_child_level_insert (void)
-{
- GtkTreeIter grandparent1;
- GtkTreeIter parent1, parent2, parent3;
- GtkTreeIter new_node;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + parent1
- * + parent2
- * + parent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent3, &grandparent1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- gtk_tree_store_prepend (GTK_TREE_STORE (model), &new_node, &grandparent1);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &new_node, 1);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_child_level_remove (void)
-{
- GtkTreeIter grandparent1;
- GtkTreeIter parent1, parent2, parent3;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + parent1
- * + parent2
- * + parent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent3, &grandparent1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent1);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent3, 1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_child_level_remove_filtered (void)
-{
- GtkTreeIter grandparent1;
- GtkTreeIter parent1, parent2, parent3, parent4;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- /* + grandparent1
- * + parent1
- * + parent2
- * + parent3
- * + parent4
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent3, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent4, &grandparent1);
-
- /* Filter first node */
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent1, 0, FALSE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent3, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent4, 0, TRUE, -1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &parent3, 0);
- assert_node_ref_count (ref_model, &parent4, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent3, 1);
- assert_node_ref_count (ref_model, &parent4, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent4, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent4);
-
- /* Check level length to get level cached again */
- check_level_length (GTK_TREE_MODEL_FILTER (filter_model), "0", 0);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent1);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent2, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter_model), "0", 1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_child_level_reordered (void)
-{
- GtkTreeIter grandparent1;
- GtkTreeIter parent1, parent2, parent3;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + parent1
- * + parent2
- * + parent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent3, &grandparent1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &parent1, &parent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &parent3, 0);
- assert_node_ref_count (ref_model, &parent1, 0);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_child_level_reordered_filtered (void)
-{
- GtkTreeIter grandparent1;
- GtkTreeIter parent1, parent2, parent3;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- /* + grandparent1
- * + parent1
- * + parent2
- * + parent3
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent3, &grandparent1);
-
- /* Test with 1 node filtered (parent1) */
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent3, 0, TRUE, -1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- /* Move invisible node parent 1 */
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &parent1, &parent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &parent3, 0);
- assert_node_ref_count (ref_model, &parent1, 0);
-
- /* Move invisible node parent 1 */
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_before (GTK_TREE_STORE (model),
- &parent1, &parent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- /* Now swap parent2 and parent2, first reference must transfer */
- /* gtk_tree_store_swap() will emit rows-reordered */
- gtk_tree_store_swap (GTK_TREE_STORE (model),
- &parent2, &parent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent3, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
-
- /* Swap back */
- gtk_tree_store_swap (GTK_TREE_STORE (model),
- &parent2, &parent3);
-
- assert_node_ref_count (ref_model, &grandparent1, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent1, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &parent3, 0);
-
- /* Test with two nodes filtered */
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent1, 0, FALSE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &parent3, 1);
-
- /* gtk_tree_store_move() will emit rows-reordered */
- gtk_tree_store_move_before (GTK_TREE_STORE (model),
- &parent3, &parent1);
-
- assert_node_ref_count (ref_model, &parent3, 1);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &parent1, 0);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_transfer_child_level_filter (void)
-{
- GtkTreeIter root;
- GtkTreeIter grandparent1, grandparent2, grandparent3, grandparent4;
- GtkTreeIter new_node;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- /* + root
- * + grandparent1
- * + grandparent2
- * + grandparent3
- * + grandparent4
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &root, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, &root);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, &root);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent3, &root);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent4, &root);
-
- /* Filter first node */
- gtk_tree_store_set (GTK_TREE_STORE (model), &root, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, FALSE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent3, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent4, 0, TRUE, -1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 1);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent3, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent4, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_prepend (GTK_TREE_STORE (model), &new_node, &root);
-
- assert_node_ref_count (ref_model, &new_node, 0);
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent1, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &new_node, 0);
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &new_node);
- gtk_tree_store_prepend (GTK_TREE_STORE (model), &new_node, &root);
-
- assert_node_ref_count (ref_model, &new_node, 0);
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 1);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &new_node, 0, TRUE, -1);
-
- assert_node_ref_count (ref_model, &new_node, 1);
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 0);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent2, 0, TRUE, -1);
- gtk_tree_store_remove (GTK_TREE_STORE (model), &new_node);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &grandparent3, 0);
- assert_node_ref_count (ref_model, &grandparent4, 0);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &grandparent4, 0, TRUE, -1);
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-
-static gboolean
-specific_path_dependent_filter_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (model, iter);
- if (gtk_tree_path_get_indices (path)[0] < 4)
- return FALSE;
-
- return TRUE;
-}
-
-static void
-specific_path_dependent_filter (void)
-{
- int i;
- GtkTreeIter iter;
- GtkListStore *list;
- GtkTreeModel *sort;
- GtkTreeModel *filter;
-
- list = gtk_list_store_new (1, G_TYPE_INT);
- gtk_list_store_insert_with_values (list, &iter, 0, 0, 1, -1);
- gtk_list_store_insert_with_values (list, &iter, 1, 0, 2, -1);
- gtk_list_store_insert_with_values (list, &iter, 2, 0, 3, -1);
- gtk_list_store_insert_with_values (list, &iter, 3, 0, 4, -1);
- gtk_list_store_insert_with_values (list, &iter, 4, 0, 5, -1);
- gtk_list_store_insert_with_values (list, &iter, 5, 0, 6, -1);
- gtk_list_store_insert_with_values (list, &iter, 6, 0, 7, -1);
- gtk_list_store_insert_with_values (list, &iter, 7, 0, 8, -1);
-
- sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (list));
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (sort), NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_path_dependent_filter_func,
- NULL, NULL);
-
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort), 0,
- GTK_SORT_DESCENDING);
-
- for (i = 0; i < 4; i++)
- {
- if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
- NULL, 1))
- gtk_list_store_remove (list, &iter);
-
- if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
- NULL, 2))
- gtk_list_store_remove (list, &iter);
- }
-
- g_object_unref (filter);
- g_object_unref (sort);
- g_object_unref (list);
-}
-
-
-static gboolean
-specific_append_after_collapse_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gint number;
- gboolean hide_negative_numbers;
-
- gtk_tree_model_get (model, iter, 1, &number, -1);
- hide_negative_numbers = GPOINTER_TO_INT (g_object_get_data (data, "private-hide-negative-numbers"));
-
- return (number >= 0 || !hide_negative_numbers);
-}
-
-static void
-specific_append_after_collapse (void)
-{
- /* This test is based on one of the test cases I found in my
- * old test cases directory. I unfortunately do not have a record
- * from who this test case originated. -Kris.
- *
- * General idea:
- * - Construct tree.
- * - Show tree, expand, collapse.
- * - Add a row.
- */
-
- GtkTreeIter iter;
- GtkTreeIter child_iter;
- GtkTreeIter child_iter2;
- GtkTreePath *append_path;
- GtkTreeStore *store;
- GtkTreeModel *filter;
- GtkTreeModel *sort;
-
- GtkWidget *window;
- GtkWidget *tree_view;
-
- store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_INT);
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
- g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
- GINT_TO_POINTER (FALSE));
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_append_after_collapse_visible_func,
- filter, NULL);
-
- sort = gtk_tree_model_sort_new_with_model (filter);
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- tree_view = gtk_tree_view_new_with_model (sort);
- gtk_container_add (GTK_CONTAINER (window), tree_view);
- gtk_widget_realize (tree_view);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- gtk_tree_store_prepend (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- 0, "hallo", 1, 1, -1);
-
- gtk_tree_store_append (store, &child_iter, &iter);
- gtk_tree_store_set (store, &child_iter,
- 0, "toemaar", 1, 1, -1);
-
- gtk_tree_store_append (store, &child_iter2, &child_iter);
- gtk_tree_store_set (store, &child_iter2,
- 0, "very deep", 1, 1, -1);
-
- append_path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &child_iter2);
-
- gtk_tree_store_append (store, &child_iter, &iter);
- gtk_tree_store_set (store, &child_iter,
- 0, "sja", 1, 1, -1);
-
- gtk_tree_store_append (store, &child_iter, &iter);
- gtk_tree_store_set (store, &child_iter,
- 0, "some word", 1, -1, -1);
-
- /* Expand and collapse the tree */
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Add another it */
- g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
- GINT_TO_POINTER (TRUE));
-
- if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, append_path))
- {
- gtk_tree_store_append (store, &child_iter, &iter);
- gtk_tree_store_set (store, &child_iter,
- 0, "new new new !!", 1, 1, -1);
- }
- gtk_tree_path_free (append_path);
-
- /* Expand */
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
- while (gtk_events_pending ())
- gtk_main_iteration ();
-}
-
-
-static gint
-specific_sort_filter_remove_node_compare_func (GtkTreeModel *model,
- GtkTreeIter *iter1,
- GtkTreeIter *iter2,
- gpointer data)
-{
- return -1;
-}
-
-static gboolean
-specific_sort_filter_remove_node_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- char *item = NULL;
-
- /* Do reference the model */
- gtk_tree_model_get (model, iter, 0, &item, -1);
- g_free (item);
-
- return FALSE;
-}
-
-static void
-specific_sort_filter_remove_node (void)
-{
- /* This test is based on one of the test cases I found in my
- * old test cases directory. I unfortunately do not have a record
- * from who this test case originated. -Kris.
- *
- * General idea:
- * - Create tree store, sort, filter models. The sort model has
- * a default sort func that is enabled, filter model a visible func
- * that defaults to returning FALSE.
- * - Remove a node from the tree store.
- */
-
- GtkTreeIter iter;
- GtkTreeStore *store;
- GtkTreeModel *filter;
- GtkTreeModel *sort;
-
- GtkWidget *window;
- GtkWidget *tree_view;
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Hello1", -1);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Hello2", -1);
-
- sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
- gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
- specific_sort_filter_remove_node_compare_func, NULL, NULL);
-
- filter = gtk_tree_model_filter_new (sort, NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_sort_filter_remove_node_visible_func,
- filter, NULL);
-
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- tree_view = gtk_tree_view_new_with_model (filter);
- gtk_container_add (GTK_CONTAINER (window), tree_view);
- gtk_widget_realize (tree_view);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Remove a node */
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
- gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
- gtk_tree_store_remove (store, &iter);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-}
-
-
-static void
-specific_sort_filter_remove_root (void)
-{
- /* This test is based on one of the test cases I found in my
- * old test cases directory. I unfortunately do not have a record
- * from who this test case originated. -Kris.
- */
-
- GtkTreeModel *model, *sort, *filter;
- GtkTreeIter root, mid, leaf;
- GtkTreePath *path;
-
- model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_INT));
- gtk_tree_store_append (GTK_TREE_STORE (model), &root, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &mid, &root);
- gtk_tree_store_append (GTK_TREE_STORE (model), &leaf, &mid);
-
- path = gtk_tree_model_get_path (model, &mid);
-
- sort = gtk_tree_model_sort_new_with_model (model);
- filter = gtk_tree_model_filter_new (sort, path);
-
- gtk_tree_path_free (path);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &root);
-
- g_object_unref (filter);
- g_object_unref (sort);
- g_object_unref (model);
-}
-
-
-static void
-specific_root_mixed_visibility (void)
-{
- int i;
- GtkTreeModel *filter;
- /* A bit nasty, apologies */
- FilterTest fixture;
-
- fixture.store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- for (i = 0; i < LEVEL_LENGTH; i++)
- {
- GtkTreeIter iter;
-
- gtk_tree_store_insert (fixture.store, &iter, NULL, i);
- if (i % 2 == 0)
- create_tree_store_set_values (fixture.store, &iter, TRUE);
- else
- create_tree_store_set_values (fixture.store, &iter, FALSE);
- }
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (fixture.store), NULL);
- fixture.filter = GTK_TREE_MODEL_FILTER (filter);
- fixture.monitor = NULL;
-
- gtk_tree_model_filter_set_visible_column (fixture.filter, 1);
-
- /* In order to trigger the potential bug, we should not access
- * the filter model here (so don't call the check functions).
- */
-
- /* Change visibility of an odd row to TRUE */
- set_path_visibility (&fixture, "3", TRUE);
- check_filter_model (&fixture);
- check_level_length (fixture.filter, NULL, 4);
-}
-
-
-
-static gboolean
-specific_has_child_filter_filter_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- return gtk_tree_model_iter_has_child (model, iter);
-}
-
-static void
-specific_has_child_filter (void)
-{
- GtkTreeModel *filter;
- GtkTreeIter iter, root;
- FilterTest fixture; /* This is not how it should be done */
- GtkWidget *tree_view;
-
- fixture.store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (fixture.store), NULL);
- fixture.filter = GTK_TREE_MODEL_FILTER (filter);
- fixture.monitor = signal_monitor_new (filter);
-
- tree_view = gtk_tree_view_new_with_model (filter);
-
- /* We will filter on parent state using a filter function. We will
- * manually keep the boolean column in sync, so that we can use
- * check_filter_model() to check the consistency of the model.
- */
- /* FIXME: We need a check_filter_model() that is not tied to LEVEL_LENGTH
- * to be able to check the structure here. We keep the calls to
- * check_filter_model() commented out until then.
- */
- gtk_tree_model_filter_set_visible_func (fixture.filter,
- specific_has_child_filter_filter_func,
- NULL, NULL);
-
- /* The first node will be initially invisible: no signals */
- gtk_tree_store_append (fixture.store, &root, NULL);
- create_tree_store_set_values (fixture.store, &root, FALSE);
-
- /* check_filter_model (&fixture); */
- check_level_length (fixture.filter, NULL, 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Insert a child node. This will cause the parent to become visible
- * since there is a child now.
- */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- /* Parent must now be visible. Do the level length check first,
- * to avoid modifying the child model triggering a row-changed to
- * the filter model.
- */
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* This should propagate row-changed */
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- set_path_visibility (&fixture, "0", TRUE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* New root node, no child, so no signal */
- gtk_tree_store_append (fixture.store, &root, NULL);
- check_level_length (fixture.filter, NULL, 1);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* When the child comes in, this node will become visible */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "1", 0);
-
- create_tree_store_set_values (fixture.store, &root, TRUE);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Add another child for 1 */
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "0", 0);
- check_level_length (fixture.filter, "1", 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Now remove one of the remaining child rows */
- signal_monitor_append_signal (fixture.monitor, ROW_DELETED, "0");
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture.store),
- &iter, "0:0");
- gtk_tree_store_remove (fixture.store, &iter);
-
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 0);
-
- set_path_visibility (&fixture, "0", FALSE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- g_object_unref (fixture.filter);
- g_object_unref (fixture.store);
- gtk_widget_destroy (tree_view);
-}
-
-
-static gboolean
-specific_root_has_child_filter_filter_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- int depth;
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (model, iter);
- depth = gtk_tree_path_get_depth (path);
- gtk_tree_path_free (path);
-
- if (depth > 1)
- return TRUE;
- /* else */
- return gtk_tree_model_iter_has_child (model, iter);
-}
-
-static void
-specific_root_has_child_filter (void)
-{
- GtkTreeModel *filter;
- GtkTreeIter iter, root;
- FilterTest fixture; /* This is not how it should be done ... */
- GtkWidget *tree_view;
-
- /* This is a variation on the above test case, specific has-child-filter,
- * herein the has-child check for visibility only applies to root level
- * nodes. In this test, children are always visible because we
- * only filter based on the "has child" criterion.
- */
-
- fixture.store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (fixture.store), NULL);
- fixture.filter = GTK_TREE_MODEL_FILTER (filter);
- fixture.monitor = signal_monitor_new (filter);
-
- tree_view = gtk_tree_view_new_with_model (filter);
-
- /* We will filter on parent state using a filter function. We will
- * manually keep the boolean column in sync, so that we can use
- * check_filter_model() to check the consistency of the model.
- */
- /* FIXME: We need a check_filter_model() that is not tied to LEVEL_LENGTH
- * to be able to check the structure here. We keep the calls to
- * check_filter_model() commented out until then.
- */
- gtk_tree_model_filter_set_visible_func (fixture.filter,
- specific_root_has_child_filter_filter_func,
- NULL, NULL);
-
- /* Add a first node, this will be invisible initially, so no signal
- * should be emitted.
- */
- gtk_tree_store_append (fixture.store, &root, NULL);
- create_tree_store_set_values (fixture.store, &root, FALSE);
-
- signal_monitor_assert_is_empty (fixture.monitor);
- /* check_filter_model (&fixture); */
- check_level_length (fixture.filter, NULL, 0);
-
- /* Add a child node. This will cause the parent to become visible,
- * so we expect row-inserted signals for both.
- */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 1);
-
- /* Modify the content of iter, no signals because the parent is not
- * expanded.
- */
- create_tree_store_set_values (fixture.store, &iter, TRUE);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Parent must now be visible. Do the level length check first,
- * to avoid modifying the child model triggering a row-changed to
- * the filter model.
- */
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 1);
-
- /* Modify path 0 */
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- set_path_visibility (&fixture, "0", TRUE);
- /* check_filter_model (&fixture); */
-
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Insert another node in the root level. Initially invisible, so
- * not expecting any signal.
- */
- gtk_tree_store_append (fixture.store, &root, NULL);
- check_level_length (fixture.filter, NULL, 1);
-
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Adding a child node which also makes parent at path 1 visible. */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "1", 1);
-
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Check if row-changed is propagated */
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- create_tree_store_set_values (fixture.store, &root, TRUE);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Insert another child under node 1 */
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "0", 1);
- check_level_length (fixture.filter, "1", 2);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Set a child node to invisible. This should not yield any
- * change, because filtering is only done on whether the root
- * node has a child, which it still has.
- */
- set_path_visibility (&fixture, "0:0", FALSE);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Now remove one of the remaining child rows */
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_DELETED, "0");
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture.store),
- &iter, "0:0");
- gtk_tree_store_remove (fixture.store, &iter);
-
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 2);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Set visibility of 0 to FALSE, no-op for filter model since
- * the child 0:0 is already gone
- */
- set_path_visibility (&fixture, "0", FALSE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- g_object_unref (fixture.filter);
- g_object_unref (fixture.store);
- gtk_widget_destroy (tree_view);
-}
-
-static void
-specific_has_child_filter_on_sort_model (void)
-{
- GtkTreeModel *filter;
- GtkTreeModel *sort_model;
- GtkTreeIter iter, root;
- FilterTest fixture; /* This is not how it should be done */
- GtkWidget *tree_view;
-
- fixture.store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
- sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (fixture.store));
- filter = gtk_tree_model_filter_new (sort_model, NULL);
- fixture.filter = GTK_TREE_MODEL_FILTER (filter);
- fixture.monitor = signal_monitor_new (filter);
-
- tree_view = gtk_tree_view_new_with_model (filter);
-
- /* We will filter on parent state using a filter function. We will
- * manually keep the boolean column in sync, so that we can use
- * check_filter_model() to check the consistency of the model.
- */
- /* FIXME: We need a check_filter_model() that is not tied to LEVEL_LENGTH
- * to be able to check the structure here. We keep the calls to
- * check_filter_model() commented out until then.
- */
- gtk_tree_model_filter_set_visible_func (fixture.filter,
- specific_has_child_filter_filter_func,
- NULL, NULL);
-
- /* The first node will be initially invisible: no signals */
- gtk_tree_store_append (fixture.store, &root, NULL);
- create_tree_store_set_values (fixture.store, &root, FALSE);
-
- /* check_filter_model (&fixture); */
- check_level_length (fixture.filter, NULL, 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Insert a child node. This will cause the parent to become visible
- * since there is a child now.
- */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- /* Parent must now be visible. Do the level length check first,
- * to avoid modifying the child model triggering a row-changed to
- * the filter model.
- */
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* This should propagate row-changed */
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- set_path_visibility (&fixture, "0", TRUE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* New root node, no child, so no signal */
- gtk_tree_store_append (fixture.store, &root, NULL);
- check_level_length (fixture.filter, NULL, 1);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* When the child comes in, this node will become visible */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "1", 0);
-
- create_tree_store_set_values (fixture.store, &root, TRUE);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Add another child for 1 */
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "0", 0);
- check_level_length (fixture.filter, "1", 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Now remove one of the remaining child rows */
- signal_monitor_append_signal (fixture.monitor, ROW_DELETED, "0");
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture.store),
- &iter, "0:0");
- gtk_tree_store_remove (fixture.store, &iter);
-
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 0);
-
- set_path_visibility (&fixture, "0", FALSE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- g_object_unref (fixture.filter);
- g_object_unref (fixture.store);
- gtk_widget_destroy (tree_view);
-}
-
-static gboolean
-specific_at_least_2_children_filter_filter_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- return gtk_tree_model_iter_n_children (model, iter) >= 2;
-}
-
-static void
-specific_at_least_2_children_filter (void)
-{
- GtkTreeModel *filter;
- GtkTreeIter iter, root;
- FilterTest fixture; /* This is not how it should be done */
- GtkWidget *tree_view;
-
- fixture.store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (fixture.store), NULL);
- fixture.filter = GTK_TREE_MODEL_FILTER (filter);
- fixture.monitor = signal_monitor_new (filter);
-
- tree_view = gtk_tree_view_new_with_model (filter);
-
- gtk_tree_model_filter_set_visible_func (fixture.filter,
- specific_at_least_2_children_filter_filter_func,
- NULL, NULL);
-
- /* The first node will be initially invisible: no signals */
- gtk_tree_store_append (fixture.store, &root, NULL);
- create_tree_store_set_values (fixture.store, &root, FALSE);
-
- /* check_filter_model (&fixture); */
- check_level_length (fixture.filter, NULL, 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Insert a child node. Nothing should happen.
- */
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- check_level_length (fixture.filter, NULL, 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Insert a second child node. This will cause the parent to become
- * visible.
- */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- /* Parent must now be visible. Do the level length check first,
- * to avoid modifying the child model triggering a row-changed to
- * the filter model.
- */
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* This should propagate row-changed */
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- set_path_visibility (&fixture, "0", TRUE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* New root node, no child, so no signal */
- gtk_tree_store_append (fixture.store, &root, NULL);
- check_level_length (fixture.filter, NULL, 1);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* First child, no signal, no change */
- gtk_tree_store_append (fixture.store, &iter, &root);
- check_level_length (fixture.filter, NULL, 1);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* When the second child comes in, this node will become visible */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "1");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "1");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "1", 0);
-
- create_tree_store_set_values (fixture.store, &root, TRUE);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Add another child for 1 */
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
- check_level_length (fixture.filter, NULL, 2);
- check_level_length (fixture.filter, "0", 0);
- check_level_length (fixture.filter, "1", 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Now remove one of the remaining child rows */
- signal_monitor_append_signal (fixture.monitor, ROW_DELETED, "0");
-
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture.store),
- &iter, "0:0");
- gtk_tree_store_remove (fixture.store, &iter);
-
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 0);
-
- set_path_visibility (&fixture, "0", FALSE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- g_object_unref (fixture.filter);
- g_object_unref (fixture.store);
- gtk_widget_destroy (tree_view);
-}
-
-static void
-specific_at_least_2_children_filter_on_sort_model (void)
-{
- GtkTreeRowReference *ref;
- GtkTreeModel *filter;
- GtkTreeModel *sort_model;
- GtkTreeIter iter, root;
- FilterTest fixture; /* This is not how it should be done */
- GtkWidget *tree_view;
-
- fixture.store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
- sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (fixture.store));
- filter = gtk_tree_model_filter_new (sort_model, NULL);
- fixture.filter = GTK_TREE_MODEL_FILTER (filter);
- fixture.monitor = signal_monitor_new (filter);
-
- tree_view = gtk_tree_view_new_with_model (filter);
-
- gtk_tree_model_filter_set_visible_func (fixture.filter,
- specific_at_least_2_children_filter_filter_func,
- NULL, NULL);
-
- /* The first node will be initially invisible: no signals */
- gtk_tree_store_append (fixture.store, &root, NULL);
- create_tree_store_set_values (fixture.store, &root, FALSE);
-
- /* check_filter_model (&fixture); */
- check_level_length (fixture.filter, NULL, 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* Insert a child node. Nothing should happen.
- */
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- check_level_length (fixture.filter, NULL, 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- {
- GtkTreePath *path = gtk_tree_path_new_from_indices (0, 0, -1);
-
- ref = gtk_tree_row_reference_new (sort_model, path);
- gtk_tree_path_free (path);
- }
-
- /* Insert a second child node. This will cause the parent to become
- * visible.
- */
- signal_monitor_append_signal (fixture.monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- gtk_tree_store_append (fixture.store, &iter, &root);
- create_tree_store_set_values (fixture.store, &iter, TRUE);
-
- /* Parent must now be visible. Do the level length check first,
- * to avoid modifying the child model triggering a row-changed to
- * the filter model.
- */
- check_level_length (fixture.filter, NULL, 1);
- check_level_length (fixture.filter, "0", 0);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* This should propagate row-changed */
- signal_monitor_append_signal (fixture.monitor, ROW_CHANGED, "0");
- signal_monitor_append_signal (fixture.monitor, ROW_HAS_CHILD_TOGGLED, "0");
-
- set_path_visibility (&fixture, "0", TRUE);
- /* check_filter_model (&fixture); */
- signal_monitor_assert_is_empty (fixture.monitor);
-
- /* New root node, no child, so no signal */
- gtk_tree_store_append (fixture.store, &root, NULL);
- check_level_length (fixture.filter, NULL, 1);
- signal_monitor_assert_is_empty (fixture.monitor);
-
- gtk_tree_row_reference_free (ref);
- g_object_unref (fixture.filter);
- g_object_unref (fixture.store);
- gtk_widget_destroy (tree_view);
-}
-
-
-static void
-specific_filter_add_child (void)
-{
- /* This test is based on one of the test cases I found in my
- * old test cases directory. I unfortunately do not have a record
- * from who this test case originated. -Kris.
- */
-
- GtkTreeIter iter;
- GtkTreeIter iter_first;
- GtkTreeIter child;
- GtkTreeStore *store;
- GtkTreeModel *filter G_GNUC_UNUSED;
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (store, &iter_first, NULL);
- gtk_tree_store_set (store, &iter_first, 0, "Hello", -1);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Hello", -1);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Hello", -1);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Hello", -1);
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
-
- gtk_tree_store_set (store, &iter, 0, "Hello", -1);
- gtk_tree_store_append (store, &child, &iter_first);
- gtk_tree_store_set (store, &child, 0, "Hello", -1);
-}
-
-static void
-specific_list_store_clear (void)
-{
- GtkTreeIter iter;
- GtkListStore *list;
- GtkTreeModel *filter;
- GtkWidget *view G_GNUC_UNUSED;
-
- list = gtk_list_store_new (1, G_TYPE_INT);
- gtk_list_store_insert_with_values (list, &iter, 0, 0, 1, -1);
- gtk_list_store_insert_with_values (list, &iter, 1, 0, 2, -1);
- gtk_list_store_insert_with_values (list, &iter, 2, 0, 3, -1);
- gtk_list_store_insert_with_values (list, &iter, 3, 0, 4, -1);
- gtk_list_store_insert_with_values (list, &iter, 4, 0, 5, -1);
- gtk_list_store_insert_with_values (list, &iter, 5, 0, 6, -1);
- gtk_list_store_insert_with_values (list, &iter, 6, 0, 7, -1);
- gtk_list_store_insert_with_values (list, &iter, 7, 0, 8, -1);
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (list), NULL);
- view = gtk_tree_view_new_with_model (filter);
-
- gtk_list_store_clear (list);
-}
-
-static void
-specific_sort_ref_leaf_and_remove_ancestor (void)
-{
- GtkTreeIter iter, child, child2, child3;
- GtkTreeStore *tree;
- GtkTreeModel *sort;
- GtkTreePath *path;
- GtkTreeRowReference *rowref;
- GtkWidget *view G_GNUC_UNUSED;
-
- tree = gtk_tree_store_new (1, G_TYPE_INT);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 0, 0, 1, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 1, 0, 2, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 2, 0, 3, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 3, 0, 4, -1);
-
- gtk_tree_store_insert_with_values (tree, &child, &iter, 0, 0, 50, -1);
- gtk_tree_store_insert_with_values (tree, &child2, &child, 0, 0, 6, -1);
- gtk_tree_store_insert_with_values (tree, &child3, &child2, 0, 0, 7, -1);
-
- sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (tree));
- view = gtk_tree_view_new_with_model (sort);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
-
- path = gtk_tree_path_new_from_indices (3, 0, 0, 0, -1);
- rowref = gtk_tree_row_reference_new (sort, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (3, 0, 0, 0, -1);
- rowref = gtk_tree_row_reference_new (sort, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (3, 0, -1);
- rowref = gtk_tree_row_reference_new (sort, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (3, -1);
- rowref = gtk_tree_row_reference_new (sort, path);
- gtk_tree_path_free (path);
-
- /* Deleting a parent */
- path = gtk_tree_path_new_from_indices (3, 0, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (tree), &iter, path);
- gtk_tree_store_remove (tree, &iter);
- gtk_tree_path_free (path);
-
- gtk_tree_row_reference_free (rowref);
-}
-
-static void
-specific_ref_leaf_and_remove_ancestor (void)
-{
- GtkTreeIter iter, child, child2, child3;
- GtkTreeStore *tree;
- GtkTreeModel *filter;
- GtkTreePath *path;
- GtkTreeRowReference *rowref;
- GtkWidget *view G_GNUC_UNUSED;
-
- tree = gtk_tree_store_new (1, G_TYPE_INT);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 0, 0, 1, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 1, 0, 2, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 2, 0, 3, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 3, 0, 4, -1);
-
- gtk_tree_store_insert_with_values (tree, &child, &iter, 0, 0, 50, -1);
- gtk_tree_store_insert_with_values (tree, &child2, &child, 0, 0, 6, -1);
- gtk_tree_store_insert_with_values (tree, &child3, &child2, 0, 0, 7, -1);
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (tree), NULL);
- view = gtk_tree_view_new_with_model (filter);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
-
- path = gtk_tree_path_new_from_indices (3, 0, 0, 0, -1);
- rowref = gtk_tree_row_reference_new (filter, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (3, 0, 0, 0, -1);
- rowref = gtk_tree_row_reference_new (filter, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (3, 0, -1);
- rowref = gtk_tree_row_reference_new (filter, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (3, -1);
- rowref = gtk_tree_row_reference_new (filter, path);
- gtk_tree_path_free (path);
-
- /* Deleting a parent */
- path = gtk_tree_path_new_from_indices (3, 0, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (tree), &iter, path);
- gtk_tree_store_remove (tree, &iter);
- gtk_tree_path_free (path);
-
- gtk_tree_row_reference_free (rowref);
-}
-
-static void
-specific_virtual_ref_leaf_and_remove_ancestor (void)
-{
- GtkTreeIter iter, child, child2, child3;
- GtkTreeStore *tree;
- GtkTreeModel *filter;
- GtkTreePath *path;
- GtkTreeRowReference *rowref;
- GtkWidget *view G_GNUC_UNUSED;
-
- tree = gtk_tree_store_new (1, G_TYPE_INT);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 0, 0, 1, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 1, 0, 2, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 2, 0, 3, -1);
- gtk_tree_store_insert_with_values (tree, &iter, NULL, 3, 0, 4, -1);
-
- gtk_tree_store_insert_with_values (tree, &child, &iter, 0, 0, 50, -1);
- gtk_tree_store_insert_with_values (tree, &child2, &child, 0, 0, 6, -1);
- gtk_tree_store_insert_with_values (tree, &child3, &child2, 0, 0, 7, -1);
-
- /* Set a virtual root of 3:0 */
- path = gtk_tree_path_new_from_indices (3, 0, -1);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (tree), path);
- gtk_tree_path_free (path);
-
- view = gtk_tree_view_new_with_model (filter);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
-
- path = gtk_tree_path_new_from_indices (0, 0, -1);
- rowref = gtk_tree_row_reference_new (filter, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (0, 0, -1);
- rowref = gtk_tree_row_reference_new (filter, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (0, -1);
- rowref = gtk_tree_row_reference_new (filter, path);
- gtk_tree_path_free (path);
-
- /* Deleting the virtual root */
- path = gtk_tree_path_new_from_indices (3, 0, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (tree), &iter, path);
- gtk_tree_store_remove (tree, &iter);
- gtk_tree_path_free (path);
-
- gtk_tree_row_reference_free (rowref);
-}
-
-
-static int
-specific_bug_301558_sort_func (GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer data)
-{
- int i, j;
-
- gtk_tree_model_get (model, a, 0, &i, -1);
- gtk_tree_model_get (model, b, 0, &j, -1);
-
- return j - i;
-}
-
-static void
-specific_bug_301558 (void)
-{
- /* Test case for GNOME Bugzilla bug 301558 provided by
- * Markku Vire.
- */
- GtkTreeStore *tree;
- GtkTreeModel *filter;
- GtkTreeModel *sort;
- GtkTreeIter root, iter, iter2;
- GtkWidget *view G_GNUC_UNUSED;
- int i;
- gboolean add;
-
- g_test_bug ("301558");
-
- tree = gtk_tree_store_new (2, G_TYPE_INT, G_TYPE_BOOLEAN);
- gtk_tree_store_append (tree, &iter, NULL);
- gtk_tree_store_set (tree, &iter, 0, 123, 1, TRUE, -1);
- gtk_tree_store_append (tree, &iter2, &iter);
- gtk_tree_store_set (tree, &iter2, 0, 73, 1, TRUE, -1);
-
- sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (tree));
- gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
- specific_bug_301558_sort_func,
- NULL, NULL);
-
- filter = gtk_tree_model_filter_new (sort, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter), 1);
-
- view = gtk_tree_view_new_with_model (filter);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- add = TRUE;
-
- for (i = 0; i < 10; i++)
- {
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (tree), &root))
- g_assert_not_reached ();
-
- if (add)
- {
- gtk_tree_store_append (tree, &iter, &root);
- gtk_tree_store_set (tree, &iter, 0, 456, 1, TRUE, -1);
- }
- else
- {
- int n;
- n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (tree), &root);
- gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (tree), &iter,
- &root, n - 1);
- gtk_tree_store_remove (tree, &iter);
- }
-
- add = !add;
- }
-}
-
-
-static gboolean
-specific_bug_311955_filter_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- int value;
-
- gtk_tree_model_get (model, iter, 0, &value, -1);
-
- return (value != 0);
-}
-
-static void
-specific_bug_311955 (void)
-{
- /* This is a test case for GNOME Bugzilla bug 311955. It was written
- * by Markku Vire.
- */
- GtkTreeIter iter, child, root;
- GtkTreeStore *store;
- GtkTreeModel *sort;
- GtkTreeModel *filter;
-
- GtkWidget *window G_GNUC_UNUSED;
- GtkWidget *tree_view;
- int i;
- int n;
- GtkTreePath *path;
-
- g_test_bug ("311955");
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &root, NULL);
- gtk_tree_store_set (store, &root, 0, 33, -1);
-
- gtk_tree_store_append (store, &iter, &root);
- gtk_tree_store_set (store, &iter, 0, 50, -1);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, 22, -1);
-
- sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
- filter = gtk_tree_model_filter_new (sort, NULL);
-
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_bug_311955_filter_func,
- NULL, NULL);
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- tree_view = gtk_tree_view_new_with_model (filter);
- g_object_unref (store);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 2);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0", 1);
-
- /* Fill model */
- for (i = 0; i < 4; i++)
- {
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
-
- gtk_tree_store_append (store, &iter, &root);
-
- if (i < 3)
- gtk_tree_store_set (store, &iter, 0, i, -1);
-
- if (i % 2 == 0)
- {
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, 10, -1);
- }
- }
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0", 3);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0:2", 1);
-
- /* Remove bottommost child from the tree. */
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
- n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), &root);
-
- if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, &root, n - 2))
- {
- if (gtk_tree_model_iter_children (GTK_TREE_MODEL (store), &child, &iter))
- gtk_tree_store_remove (store, &child);
- }
- else
- g_assert_not_reached ();
-
- path = gtk_tree_path_new_from_indices (0, 2, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
- gtk_tree_path_free (path);
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0", 3);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0:2", 0);
-}
-
-static void
-specific_bug_311955_clean (void)
-{
- /* Cleaned up version of the test case for GNOME Bugzilla bug 311955,
- * which is easier to understand.
- */
- GtkTreeIter iter, child, grandchild;
- GtkTreeStore *store;
- GtkTreeModel *sort;
- GtkTreeModel *filter;
-
- GtkWidget *tree_view;
- GtkTreePath *path;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, 1, -1);
-
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, 1, -1);
-
- sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
- filter = gtk_tree_model_filter_new (sort, NULL);
-
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_bug_311955_filter_func,
- NULL, NULL);
-
- tree_view = gtk_tree_view_new_with_model (filter);
- g_object_unref (store);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter), NULL, 1);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0", 1);
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
-
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, 0, -1);
-
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, 1, -1);
-
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, 1, -1);
-
- gtk_tree_store_append (store, &grandchild, &child);
- gtk_tree_store_set (store, &grandchild, 0, 1, -1);
-
- gtk_tree_store_append (store, &child, &iter);
- /* Don't set a value: assume 0 */
-
- /* Remove leaf node, check trigger row-has-child-toggled */
- path = gtk_tree_path_new_from_indices (0, 3, 0, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
- gtk_tree_path_free (path);
- gtk_tree_store_remove (store, &iter);
-
- path = gtk_tree_path_new_from_indices (0, 2, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
- gtk_tree_path_free (path);
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0", 3);
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "0:2", 0);
-
- gtk_widget_destroy (tree_view);
-}
-
-static void
-specific_bug_346800 (void)
-{
- /* This is a test case for GNOME Bugzilla bug 346800. It was written
- * by Jonathan Matthew.
- */
-
- GtkTreeIter node_iters[50];
- GtkTreeIter child_iters[50];
- GtkTreeModel *model;
- GtkTreeModelFilter *filter;
- GtkTreeStore *store;
- GType *columns;
- int i;
- int items = 50;
- columns = g_new (GType, 2);
- columns[0] = G_TYPE_STRING;
- columns[1] = G_TYPE_BOOLEAN;
- store = gtk_tree_store_newv (2, columns);
- model = GTK_TREE_MODEL (store);
-
- g_test_bug ("346800");
-
- filter = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (model, NULL));
- gtk_tree_model_filter_set_visible_column (filter, 1);
-
- for (i=0; i<items; i++)
- {
- /* allocate random amounts of junk, otherwise the filter model's arrays can expand without moving */
-
- g_malloc (138);
- gtk_tree_store_append (store, &node_iters[i], NULL);
- gtk_tree_store_set (store, &node_iters[i],
- 0, "something",
- 1, ((i%6) == 0) ? FALSE : TRUE,
- -1);
-
- g_malloc (47);
- gtk_tree_store_append (store, &child_iters[i], &node_iters[i]);
- gtk_tree_store_set (store, &child_iters[i],
- 0, "something else",
- 1, FALSE,
- -1);
- gtk_tree_model_filter_refilter (filter);
-
- if (i > 6)
- {
- gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-1], 1,
- (i & 1) ? TRUE : FALSE, -1);
- gtk_tree_model_filter_refilter (filter);
-
- gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-2], 1,
- (i & 1) ? FALSE: TRUE, -1);
- gtk_tree_model_filter_refilter (filter);
- }
- }
-}
-
-static gboolean
-specific_bug_464173_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gboolean *visible = (gboolean *)data;
-
- return *visible;
-}
-
-static void
-specific_bug_464173 (void)
-{
- /* Test case for GNOME Bugzilla bug 464173, test case written
- * by Andreas Koehler.
- */
- GtkTreeStore *model;
- GtkTreeModelFilter *f_model;
- GtkTreeIter iter1, iter2;
- GtkWidget *view G_GNUC_UNUSED;
- gboolean visible = TRUE;
-
- g_test_bug ("464173");
-
- model = gtk_tree_store_new (1, G_TYPE_STRING);
- gtk_tree_store_append (model, &iter1, NULL);
- gtk_tree_store_set (model, &iter1, 0, "Foo", -1);
- gtk_tree_store_append (model, &iter2, &iter1);
- gtk_tree_store_set (model, &iter2, 0, "Bar", -1);
-
- f_model = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL(model), NULL));
- gtk_tree_model_filter_set_visible_func (f_model,
- specific_bug_464173_visible_func,
- &visible, NULL);
-
- view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (f_model));
-
- visible = FALSE;
- gtk_tree_model_filter_refilter (f_model);
-}
-
-
-static gboolean
-specific_bug_540201_filter_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gboolean has_children;
-
- has_children = gtk_tree_model_iter_has_child (model, iter);
-
- return has_children;
-}
-
-static void
-specific_bug_540201 (void)
-{
- /* Test case for GNOME Bugzilla bug 540201, steps provided by
- * Charles Day.
- */
- GtkTreeIter iter, root;
- GtkTreeStore *store;
- GtkTreeModel *filter;
-
- GtkWidget *tree_view G_GNUC_UNUSED;
-
- g_test_bug ("540201");
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &root, NULL);
- gtk_tree_store_set (store, &root, 0, 33, -1);
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
- tree_view = gtk_tree_view_new_with_model (filter);
-
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_bug_540201_filter_func,
- NULL, NULL);
-
- gtk_tree_store_append (store, &iter, &root);
- gtk_tree_store_set (store, &iter, 0, 50, -1);
-
- gtk_tree_store_append (store, &iter, &root);
- gtk_tree_store_set (store, &iter, 0, 22, -1);
-
-
- gtk_tree_store_append (store, &root, NULL);
- gtk_tree_store_set (store, &root, 0, 33, -1);
-
- gtk_tree_store_append (store, &iter, &root);
- gtk_tree_store_set (store, &iter, 0, 22, -1);
-}
-
-
-static gboolean
-specific_bug_549287_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gboolean result = FALSE;
-
- result = gtk_tree_model_iter_has_child (model, iter);
-
- return result;
-}
-
-static void
-specific_bug_549287 (void)
-{
- /* Test case for GNOME Bugzilla bug 529287, provided by Julient Puydt */
-
- int i;
- GtkTreeStore *store;
- GtkTreeModel *filtered;
- GtkWidget *view G_GNUC_UNUSED;
- GtkTreeIter iter;
- GtkTreeIter *swap, *parent, *child;
-
- g_test_bug ("529287");
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
- filtered = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filtered),
- specific_bug_549287_visible_func,
- NULL, NULL);
-
- view = gtk_tree_view_new_with_model (filtered);
-
- for (i = 0; i < 4; i++)
- {
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
- {
- parent = gtk_tree_iter_copy (&iter);
- child = gtk_tree_iter_copy (&iter);
-
- while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store),
- child, parent, 0))
- {
-
- swap = parent;
- parent = child;
- child = swap;
- }
-
- gtk_tree_store_append (store, child, parent);
- gtk_tree_store_set (store, child,
- 0, "Something",
- -1);
-
- gtk_tree_iter_free (parent);
- gtk_tree_iter_free (child);
- }
- else
- {
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- 0, "Something",
- -1);
- }
-
- /* since we inserted something, we changed the visibility conditions: */
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filtered));
- }
-}
-
-static gboolean
-specific_bug_621076_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gboolean visible = FALSE;
- gchar *str = NULL;
-
- gtk_tree_model_get (model, iter, 0, &str, -1);
- if (str != NULL && g_str_has_prefix (str, "visible"))
- {
- visible = TRUE;
- }
- else
- {
- GtkTreeIter child_iter;
- gboolean valid;
-
- /* Recursively check if we have a visible child */
- for (valid = gtk_tree_model_iter_children (model, &child_iter, iter);
- valid; valid = gtk_tree_model_iter_next (model, &child_iter))
- {
- if (specific_bug_621076_visible_func (model, &child_iter, data))
- {
- visible = TRUE;
- break;
- }
- }
- }
-
- if (str)
- g_free (str);
-
- return visible;
-}
-
-static void
-specific_bug_621076 (void)
-{
- /* Test case for GNOME Bugzilla bug 621076, provided by Xavier Claessens */
-
- /* This test case differs from has-child-filter and root-has-child-filter
- * in that the visible function both filters on content and model
- * structure. Also, it is recursive.
- */
-
- GtkTreeStore *store;
- GtkTreeModel *filter;
- GtkWidget *view;
- GtkTreeIter group_iter;
- GtkTreeIter item_iter;
- SignalMonitor *monitor;
-
- g_test_bug ("621076");
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_bug_621076_visible_func,
- NULL, NULL);
-
- view = gtk_tree_view_new_with_model (filter);
- g_object_ref_sink (view);
-
- monitor = signal_monitor_new (filter);
-
- signal_monitor_append_signal (monitor, ROW_INSERTED, "0");
- gtk_tree_store_insert_with_values (store, &item_iter, NULL, -1,
- 0, "visible-group-0",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* visible-group-0 is not expanded, so ROW_INSERTED should not be emitted
- * for its children. However, ROW_HAS_CHILD_TOGGLED should be emitted on
- * visible-group-0 to tell the view that row can be expanded. */
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "0");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "0");
- group_iter = item_iter;
- gtk_tree_store_insert_with_values (store, &item_iter, &group_iter, -1,
- 0, "visible-0:0",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- signal_monitor_append_signal (monitor, ROW_INSERTED, "1");
- gtk_tree_store_insert_with_values (store, &item_iter, NULL, -1,
- 0, "visible-group-1",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* We are adding an hidden item inside visible-group-1, so
- * ROW_HAS_CHILD_TOGGLED should not be emitted. It is emitted though,
- * because the signal originating at TreeStore will be propagated,
- * as well a generated signal because the state of the parent *could*
- * change by a change in the model.
- */
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "1");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "1");
- group_iter = item_iter;
- gtk_tree_store_insert_with_values (store, &item_iter, &group_iter, -1,
- 0, "group-1:0",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* This group is invisible and its parent too. Nothing should be emitted */
- group_iter = item_iter;
- gtk_tree_store_insert_with_values (store, &item_iter, &group_iter, -1,
- 0, "group-1:0:0",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* Adding a visible item in this group hierarchy will make all nodes
- * in this path visible. The first level should simply tell the view
- * that it now has a child, and the view will load the tree if needed
- * (depends on the expanded state).
- */
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "1");
- group_iter = item_iter;
- gtk_tree_store_insert_with_values (store, &item_iter, &group_iter, -1,
- 0, "visible-1:0:0:0",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- check_level_length (GTK_TREE_MODEL_FILTER (filter), "1", 1);
-
- gtk_tree_store_insert_with_values (store, &item_iter, NULL, -1,
- 0, "group-2",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* Parent is invisible, and adding this invisible item won't change that,
- * so no signal should be emitted. */
- group_iter = item_iter;
- gtk_tree_store_insert_with_values (store, NULL, &group_iter, -1,
- 0, "invisible-2:0",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* This makes group-2 visible, so it gets inserted and tells it has
- * children.
- */
- signal_monitor_append_signal (monitor, ROW_INSERTED, "2");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "2");
- gtk_tree_store_insert_with_values (store, NULL, &group_iter, -1,
- 0, "visible-2:1",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* group-2 is already visible, so this time it is a normal insertion */
- gtk_tree_store_insert_with_values (store, NULL, &group_iter, -1,
- 0, "visible-2:2",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
-
- gtk_tree_store_insert_with_values (store, &item_iter, NULL, -1,
- 0, "group-3",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* Parent is invisible, and adding this invisible item won't change that,
- * so no signal should be emitted. */
- group_iter = item_iter;
- gtk_tree_store_insert_with_values (store, NULL, &group_iter, -1,
- 0, "invisible-3:0",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- gtk_tree_store_insert_with_values (store, &item_iter, &group_iter, -1,
- 0, "invisible-3:1",
- -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* This will make group 3 visible. */
- signal_monitor_append_signal (monitor, ROW_INSERTED, "3");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "3");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "3");
- gtk_tree_store_set (store, &item_iter, 0, "visible-3:1", -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* Make sure all groups are expanded, so the filter has the tree cached */
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Should only yield a row-changed */
- signal_monitor_append_signal (monitor, ROW_CHANGED, "3:0");
- gtk_tree_store_set (store, &item_iter, 0, "visible-3:1", -1);
- signal_monitor_assert_is_empty (monitor);
-
- /* Now remove/hide some items. If a group loses its last item, the group
- * should be deleted instead of the item.
- */
-
- signal_monitor_append_signal (monitor, ROW_DELETED, "2:1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &item_iter, "2:2");
- gtk_tree_store_remove (store, &item_iter);
- signal_monitor_assert_is_empty (monitor);
-
- signal_monitor_append_signal (monitor, ROW_DELETED, "2:0");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "2");
- signal_monitor_append_signal (monitor, ROW_DELETED, "2");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &item_iter, "2:1");
- gtk_tree_store_set (store, &item_iter, 0, "invisible-2:1", -1);
- signal_monitor_assert_is_empty (monitor);
-
- signal_monitor_append_signal (monitor, ROW_DELETED, "1:0:0:0");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "1:0:0");
- signal_monitor_append_signal (monitor, ROW_DELETED, "1:0");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "1");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &item_iter, "1:0:0:0");
- gtk_tree_store_remove (store, &item_iter);
- signal_monitor_assert_is_empty (monitor);
-
- /* Hide a group using row-changed instead of row-deleted */
- /* Caution: group 2 is gone, so offsets of the signals have moved. */
- signal_monitor_append_signal (monitor, ROW_DELETED, "2:0");
- signal_monitor_append_signal (monitor, ROW_HAS_CHILD_TOGGLED, "2");
- signal_monitor_append_signal (monitor, ROW_DELETED, "2");
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &item_iter,
- "3:1");
- gtk_tree_store_set (store, &item_iter, 0, "invisible-3:1", -1);
- signal_monitor_assert_is_empty (monitor);
-
-#if 0
- {
- GtkWidget *window;
- GtkTreeViewColumn *col;
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
-
- col = gtk_tree_view_column_new_with_attributes ("foo",
- gtk_cell_renderer_text_new (),
- "text", 0, NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (view), col);
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_signal_connect (window, "delete-event",
- G_CALLBACK (gtk_widget_destroy), NULL);
- g_signal_connect (window, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_container_add (GTK_CONTAINER (window), view);
-
- gtk_widget_show (view);
- gtk_widget_show (window);
-
- gtk_main ();
- }
-#endif
-
- /* Cleanup */
- signal_monitor_free (monitor);
- g_object_unref (view);
- g_object_unref (store);
- g_object_unref (filter);
-}
-
-static void
-specific_bug_657353_related (void)
-{
- GtkTreeIter node1, node2, node3, node4;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *filter_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_BOOLEAN };
-
- /* gtk_tree_model_filter_rows_reordered() used to have a problem to
- * not properly transfer the first ref count when the first node in
- * the level does not have elt->offset == 0. This test checks for
- * that. This bug could cause the faulty condition
- * elt->ext_ref_count > elt->ref_count
- * to raise.
- */
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &node1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &node2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &node3, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &node4, NULL);
-
- /* Hide the first node */
- gtk_tree_store_set (GTK_TREE_STORE (model), &node1, 0, FALSE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &node2, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &node3, 0, TRUE, -1);
- gtk_tree_store_set (GTK_TREE_STORE (model), &node4, 0, TRUE, -1);
-
- filter_model = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 0);
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- assert_node_ref_count (ref_model, &node1, 0);
- assert_node_ref_count (ref_model, &node2, 2);
- assert_node_ref_count (ref_model, &node3, 1);
- assert_node_ref_count (ref_model, &node4, 1);
-
- /* Swap nodes 2 and 3 */
-
- /* gtk_tree_store_swap() will emit rows-reordered */
- gtk_tree_store_swap (GTK_TREE_STORE (model),
- &node2, &node3);
-
- assert_node_ref_count (ref_model, &node1, 0);
- assert_node_ref_count (ref_model, &node3, 2);
- assert_node_ref_count (ref_model, &node2, 1);
- assert_node_ref_count (ref_model, &node4, 1);
-
- /* Hide node 3 */
- gtk_tree_store_set (GTK_TREE_STORE (model), &node3, 0, FALSE, -1);
-
- assert_node_ref_count (ref_model, &node1, 0);
- assert_node_ref_count (ref_model, &node3, 0);
- assert_node_ref_count (ref_model, &node2, 2);
- assert_node_ref_count (ref_model, &node4, 1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (ref_model);
-}
-
-static gboolean
-specific_bug_657353_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gchar *str;
- gboolean ret = FALSE;
-
- gtk_tree_model_get (model, iter, 0, &str, -1);
- ret = strstr (str, "hidden") ? FALSE : TRUE;
- g_free (str);
-
- return ret;
-}
-
-static void
-specific_bug_657353 (void)
-{
- GtkListStore *store;
- GtkTreeModel *sort_model;
- GtkTreeModel *filter_model;
- GtkTreeIter iter, iter_a, iter_b, iter_c;
- GtkWidget *tree_view;
-
- /* This is a very carefully crafted test case that is triggering the
- * situation described in bug 657353.
- *
- * GtkListStore acts like EphyCompletionModel
- * GtkTreeModelSort acts like the sort model added in
- * ephy_location_entry_set_completion.
- * GtkTreeModelFilter acts like the filter model in
- * GtkEntryCompletion.
- */
-
- /* Set up a model that's wrapped in a GtkTreeModelSort. The first item
- * will be hidden.
- */
- store = gtk_list_store_new (1, G_TYPE_STRING);
- gtk_list_store_insert_with_values (store, &iter_b, 0, 0, "BBB hidden", -1);
- gtk_list_store_insert_with_values (store, &iter, 1, 0, "EEE", -1);
- gtk_list_store_insert_with_values (store, &iter, 2, 0, "DDD", -1);
- gtk_list_store_insert_with_values (store, &iter_c, 3, 0, "CCC", -1);
-
- sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
-
- filter_model = gtk_tree_model_filter_new (sort_model, NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter_model),
- specific_bug_657353_visible_func,
- filter_model, NULL);
-
- tree_view = gtk_tree_view_new_with_model (filter_model);
-
- /* This triggers emission of rows-reordered. The elt with offset == 0
- * is hidden, which used to cause misbehavior. (The first reference should
- * have moved to CCC, which did not happen).
- */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_ASCENDING);
-
- /* By inserting another item that will appear at the first position, a
- * reference transfer is done from CCC (which failed to get this reference
- * earlier) to AAA. At this point, the rule
- * elt->ref_count >= elt->ext_ref_count is broken for CCC.
- */
- gtk_list_store_insert_with_values (store, &iter_a, 6, 0, "AAA", -1);
-
- /* When we hide CCC, the references cannot be correctly released, because
- * CCC failed to get a reference during rows-reordered. The faulty condition
- * only manifests itself here with MODEL_FILTER_DEBUG disabled (as is usual
- * in production).
- */
- gtk_list_store_set (store, &iter_c, 0, "CCC hidden", -1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter_model);
- g_object_unref (sort_model);
- g_object_unref (store);
-}
-
-static void
-specific_bug_658696 (void)
-{
- GtkTreeStore *store;
- GtkTreeModel *filter;
- GtkTreePath *vroot;
- GtkTreeIter iter;
-
- store = create_tree_store (4, TRUE);
-
- vroot = gtk_tree_path_new_from_indices (0, 0, -1);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), vroot);
- gtk_tree_path_free (vroot);
-
- /* This used to cause a crash in gtk_tree_model_filter_check_ancestors() */
- gtk_tree_store_append (store, &iter, NULL);
-
- g_object_unref (store);
- g_object_unref (filter);
-}
-
-static gboolean
-specific_bug_659022_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- GtkTreeIter tmp;
-
- if (!gtk_tree_model_iter_parent (model, &tmp, iter))
- {
- if (gtk_tree_model_iter_n_children (model, iter) >= 2)
- return TRUE;
- else
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-specific_bug_659022_row_changed_emission (void)
-{
- GtkTreeModel *filter;
- GtkTreeModel *model;
- GtkTreeIter parent, child, child2;
- GtkTreePath *path;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
-
- filter = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_bug_659022_visible_func,
- NULL, NULL);
-
- tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (filter));
-
- gtk_tree_store_insert (GTK_TREE_STORE (model), &parent, NULL, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child, &parent, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child2, &parent, 0);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter));
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &child2);
-
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter));
-
- path = gtk_tree_model_get_path (model, &child);
- gtk_tree_model_row_changed (model, path, &child);
- gtk_tree_path_free (path);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter);
- g_object_unref (model);
-}
-
-static void
-specific_bug_659022_row_deleted_node_invisible (void)
-{
- GtkTreeModel *filter;
- GtkTreeModel *model;
- GtkTreeIter parent, child;
- GtkTreeIter parent2, child2, child3;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
-
- filter = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_bug_659022_visible_func,
- NULL, NULL);
-
- tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (filter));
-
- gtk_tree_store_insert (GTK_TREE_STORE (model), &parent, NULL, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child, &parent, 0);
-
- gtk_tree_store_insert (GTK_TREE_STORE (model), &parent2, NULL, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child2, &parent2, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child3, &parent2, 0);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter));
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter);
- g_object_unref (model);
-}
-
-static void
-specific_bug_659022_row_deleted_free_level (void)
-{
- GtkTreeModel *filter;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeIter parent, child;
- GtkTreeIter parent2, child2, child3;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- filter = gtk_tree_model_filter_new (model, NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
- specific_bug_659022_visible_func,
- NULL, NULL);
-
- tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (filter));
-
- /* Carefully construct a model */
- gtk_tree_store_insert (GTK_TREE_STORE (model), &parent, NULL, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child, &parent, 0);
-
- gtk_tree_store_insert (GTK_TREE_STORE (model), &parent2, NULL, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child2, &parent2, 0);
- gtk_tree_store_insert (GTK_TREE_STORE (model), &child3, &parent2, 0);
-
- /* Only parent2 is visible, child3 holds first ref count for that level
- * (Note that above, both child2 as child3 are inserted at position 0).
- */
- assert_node_ref_count (ref_model, &parent, 0);
- assert_node_ref_count (ref_model, &child, 0);
- assert_node_ref_count (ref_model, &parent2, 3);
- assert_node_ref_count (ref_model, &child3, 1);
- assert_node_ref_count (ref_model, &child2, 0);
-
- /* Make sure child level is cached */
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &parent, 0);
- assert_node_ref_count (ref_model, &child, 0);
- assert_node_ref_count (ref_model, &parent2, 3);
- assert_node_ref_count (ref_model, &child3, 2);
- assert_node_ref_count (ref_model, &child2, 1);
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &parent, 0);
- assert_node_ref_count (ref_model, &child, 0);
- assert_node_ref_count (ref_model, &parent2, 3);
- assert_node_ref_count (ref_model, &child3, 1);
- assert_node_ref_count (ref_model, &child2, 0);
-
- /* Remove node with longer child level first */
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent2);
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (filter);
- g_object_unref (model);
-}
-
-static void
-specific_bug_679910 (void)
-{
- GtkTreeModel *filter;
- GtkListStore *store;
- GtkTreeIter iter, nil_iter;
- GtkTreeIter filter_iter;
-
- store = gtk_list_store_new (1, G_TYPE_POINTER);
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
-
- gtk_list_store_append (store, &nil_iter);
- gtk_list_store_append (store, &iter);
- gtk_list_store_append (store, &nil_iter);
-
- gtk_tree_model_filter_convert_child_iter_to_iter (GTK_TREE_MODEL_FILTER (filter),
- &filter_iter,
- &iter);
- iter = filter_iter;
- g_return_if_fail (gtk_tree_model_iter_next (filter, &iter));
- iter = filter_iter;
- g_return_if_fail (gtk_tree_model_iter_previous (filter, &iter));
-
- g_object_unref (filter);
- g_object_unref (store);
-}
-
-/* main */
-
-void
-register_filter_model_tests (void)
-{
- g_test_add ("/TreeModelFilter/self/verify-test-suite",
- FilterTest, NULL,
- filter_test_setup,
- verify_test_suite,
- filter_test_teardown);
-
- g_test_add ("/TreeModelFilter/self/verify-test-suite/vroot/depth-1",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup,
- verify_test_suite_vroot,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/self/verify-test-suite/vroot/depth-2",
- FilterTest, gtk_tree_path_new_from_indices (2, 3, -1),
- filter_test_setup,
- verify_test_suite_vroot,
- filter_test_teardown);
-
-
- g_test_add ("/TreeModelFilter/filled/hide-root-level",
- FilterTest, NULL,
- filter_test_setup,
- filled_hide_root_level,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filled/hide-child-levels",
- FilterTest, NULL,
- filter_test_setup,
- filled_hide_child_levels,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filled/hide-child-levels/root-expanded",
- FilterTest, NULL,
- filter_test_setup,
- filled_hide_child_levels_root_expanded,
- filter_test_teardown);
-
- g_test_add ("/TreeModelFilter/filled/hide-root-level/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup,
- filled_vroot_hide_root_level,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filled/hide-child-levels/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup,
- filled_vroot_hide_child_levels,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filled/hide-child-levels/vroot-root-expanded",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup,
- filled_vroot_hide_child_levels_root_expanded,
- filter_test_teardown);
-
-
- g_test_add ("/TreeModelFilter/empty/show-nodes",
- FilterTest, NULL,
- filter_test_setup_empty,
- empty_show_nodes,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/empty/show-multiple-nodes",
- FilterTest, NULL,
- filter_test_setup_empty,
- empty_show_multiple_nodes,
- filter_test_teardown);
-
- g_test_add ("/TreeModelFilter/empty/show-nodes/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_empty,
- empty_vroot_show_nodes,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/empty/show-multiple-nodes/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_empty,
- empty_vroot_show_multiple_nodes,
- filter_test_teardown);
-
-
- g_test_add ("/TreeModelFilter/unfiltered/hide-single",
- FilterTest, NULL,
- filter_test_setup_unfiltered,
- unfiltered_hide_single,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single/root-expanded",
- FilterTest, NULL,
- filter_test_setup_unfiltered_root_expanded,
- unfiltered_hide_single_root_expanded,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-child",
- FilterTest, NULL,
- filter_test_setup_unfiltered,
- unfiltered_hide_single_child,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-child/root-expanded",
- FilterTest, NULL,
- filter_test_setup_unfiltered_root_expanded,
- unfiltered_hide_single_child_root_expanded,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-multi-level",
- FilterTest, NULL,
- filter_test_setup_unfiltered,
- unfiltered_hide_single_multi_level,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-multi-level/root-expanded",
- FilterTest, NULL,
- filter_test_setup_unfiltered_root_expanded,
- unfiltered_hide_single_multi_level_root_expanded,
- filter_test_teardown);
-
- g_test_add ("/TreeModelFilter/unfiltered/hide-single/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_unfiltered,
- unfiltered_vroot_hide_single,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-child/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_unfiltered,
- unfiltered_vroot_hide_single_child,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-child/vroot/root-expanded",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_unfiltered_root_expanded,
- unfiltered_vroot_hide_single_child_root_expanded,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-multi-level/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_unfiltered,
- unfiltered_vroot_hide_single_multi_level,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/hide-single-multi-level/vroot/root-expanded",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_unfiltered_root_expanded,
- unfiltered_vroot_hide_single_multi_level_root_expanded,
- filter_test_teardown);
-
-
-
- g_test_add ("/TreeModelFilter/unfiltered/show-single",
- FilterTest, NULL,
- filter_test_setup_empty_unfiltered,
- unfiltered_show_single,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-child",
- FilterTest, NULL,
- filter_test_setup_empty_unfiltered,
- unfiltered_show_single_child,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-child/root-expanded",
- FilterTest, NULL,
- filter_test_setup_empty_unfiltered_root_expanded,
- unfiltered_show_single_child_root_expanded,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-multi-level",
- FilterTest, NULL,
- filter_test_setup_empty_unfiltered,
- unfiltered_show_single_multi_level,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-multi-level/root-expanded",
- FilterTest, NULL,
- filter_test_setup_empty_unfiltered_root_expanded,
- unfiltered_show_single_multi_level_root_expanded,
- filter_test_teardown);
-
- g_test_add ("/TreeModelFilter/unfiltered/show-single/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_empty_unfiltered,
- unfiltered_vroot_show_single,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-child/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_empty_unfiltered,
- unfiltered_vroot_show_single_child,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-child/vroot/root-expanded",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_empty_unfiltered_root_expanded,
- unfiltered_vroot_show_single_child_root_expanded,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-multi-level/vroot",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_empty_unfiltered,
- unfiltered_vroot_show_single_multi_level,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/show-single-multi-level/vroot/root-expanded",
- FilterTest, gtk_tree_path_new_from_indices (2, -1),
- filter_test_setup_empty_unfiltered_root_expanded,
- unfiltered_vroot_show_single_multi_level_root_expanded,
- filter_test_teardown);
-
-
- g_test_add ("/TreeModelFilter/unfiltered/rows-reordered/root-level",
- FilterTest, NULL,
- filter_test_setup_unfiltered,
- unfiltered_rows_reordered_root_level,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/unfiltered/rows-reordered/child-level",
- FilterTest, NULL,
- filter_test_setup_unfiltered,
- unfiltered_rows_reordered_child_level,
- filter_test_teardown);
-
- g_test_add ("/TreeModelFilter/filtered/rows-reordered/root-level/first-hidden",
- FilterTest, NULL,
- filter_test_setup,
- filtered_rows_reordered_root_level_first_hidden,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filtered/rows-reordered/root-level/middle-hidden",
- FilterTest, NULL,
- filter_test_setup,
- filtered_rows_reordered_root_level_middle_hidden,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filtered/rows-reordered/child-level/first-hidden",
- FilterTest, NULL,
- filter_test_setup,
- filtered_rows_reordered_child_level_first_hidden,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filtered/rows-reordered/child-level/middle-hidden",
- FilterTest, NULL,
- filter_test_setup,
- filtered_rows_reordered_child_level_middle_hidden,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filtered/rows-reordered/child-level/4-hidden",
- FilterTest, NULL,
- filter_test_setup,
- filtered_rows_reordered_child_level_4_hidden,
- filter_test_teardown);
- g_test_add ("/TreeModelFilter/filtered/rows-reordered/child-level/all-hidden",
- FilterTest, NULL,
- filter_test_setup,
- filtered_rows_reordered_child_level_all_hidden,
- filter_test_teardown);
-
- /* Inserts in child models after creation of filter model */
- g_test_add_func ("/TreeModelFilter/insert/before",
- insert_before);
- g_test_add_func ("/TreeModelFilter/insert/child",
- insert_child);
-
- /* Removals from child model after creating of filter model */
- g_test_add_func ("/TreeModelFilter/remove/node",
- remove_node);
- g_test_add_func ("/TreeModelFilter/remove/node-vroot",
- remove_node_vroot);
- g_test_add_func ("/TreeModelFilter/remove/vroot-ancestor",
- remove_vroot_ancestor);
-
- /* Reference counting */
- g_test_add_func ("/TreeModelFilter/ref-count/single-level",
- ref_count_single_level);
- g_test_add_func ("/TreeModelFilter/ref-count/two-levels",
- ref_count_two_levels);
- g_test_add_func ("/TreeModelFilter/ref-count/three-levels",
- ref_count_three_levels);
- g_test_add_func ("/TreeModelFilter/ref-count/delete-row",
- ref_count_delete_row);
- g_test_add_func ("/TreeModelFilter/ref-count/filter-row/length-1",
- ref_count_filter_row_length_1);
- g_test_add_func ("/TreeModelFilter/ref-count/filter-row/length-1-remove-in-root-level",
- ref_count_filter_row_length_1_remove_in_root_level);
- g_test_add_func ("/TreeModelFilter/ref-count/filter-row/length-1-remove-in-child-level",
- ref_count_filter_row_length_1_remove_in_child_level);
- g_test_add_func ("/TreeModelFilter/ref-count/filter-row/length-gt-1",
- ref_count_filter_row_length_gt_1);
- g_test_add_func ("/TreeModelFilter/ref-count/filter-row/length-gt-1-visible-children",
- ref_count_filter_row_length_gt_1_visible_children);
- g_test_add_func ("/TreeModelFilter/ref-count/cleanup",
- ref_count_cleanup);
- g_test_add_func ("/TreeModelFilter/ref-count/row-ref",
- ref_count_row_ref);
-
- /* Reference counting, transfer of first reference on
- * first node in level. This is a GtkTreeModelFilter-specific
- * feature.
- */
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/root-level/insert",
- ref_count_transfer_root_level_insert);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/root-level/remove",
- ref_count_transfer_root_level_remove);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/root-level/remove/filtered",
- ref_count_transfer_root_level_remove_filtered);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/root-level/reordered",
- ref_count_transfer_root_level_reordered);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/root-level/reordered/filtered",
- ref_count_transfer_root_level_reordered_filtered);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/root-level/filter",
- ref_count_transfer_root_level_filter);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/child-level/insert",
- ref_count_transfer_child_level_insert);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/child-level/remove",
- ref_count_transfer_child_level_remove);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/child-level/remove/filtered",
- ref_count_transfer_child_level_remove_filtered);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/child-level/reordered",
- ref_count_transfer_child_level_reordered);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/child-level/reordered/filtered",
- ref_count_transfer_child_level_reordered_filtered);
- g_test_add_func ("/TreeModelFilter/ref-count/transfer/child-level/filter",
- ref_count_transfer_child_level_filter);
-
- g_test_add_func ("/TreeModelFilter/specific/path-dependent-filter",
- specific_path_dependent_filter);
- g_test_add_func ("/TreeModelFilter/specific/append-after-collapse",
- specific_append_after_collapse);
- g_test_add_func ("/TreeModelFilter/specific/sort-filter-remove-node",
- specific_sort_filter_remove_node);
- g_test_add_func ("/TreeModelFilter/specific/sort-filter-remove-root",
- specific_sort_filter_remove_root);
- g_test_add_func ("/TreeModelFilter/specific/root-mixed-visibility",
- specific_root_mixed_visibility);
- g_test_add_func ("/TreeModelFilter/specific/has-child-filter",
- specific_has_child_filter);
- g_test_add_func ("/TreeModelFilter/specific/has-child-filter-on-sort-model",
- specific_has_child_filter_on_sort_model);
- g_test_add_func ("/TreeModelFilter/specific/at-least-2-children-filter",
- specific_at_least_2_children_filter);
- g_test_add_func ("/TreeModelFilter/specific/at-least-2-children-filter-on-sort-model",
- specific_at_least_2_children_filter_on_sort_model);
- g_test_add_func ("/TreeModelFilter/specific/root-has-child-filter",
- specific_root_has_child_filter);
- g_test_add_func ("/TreeModelFilter/specific/filter-add-child",
- specific_filter_add_child);
- g_test_add_func ("/TreeModelFilter/specific/list-store-clear",
- specific_list_store_clear);
- g_test_add_func ("/TreeModelFilter/specific/sort-ref-leaf-and-remove-ancestor",
- specific_sort_ref_leaf_and_remove_ancestor);
- g_test_add_func ("/TreeModelFilter/specific/ref-leaf-and-remove-ancestor",
- specific_ref_leaf_and_remove_ancestor);
- g_test_add_func ("/TreeModelFilter/specific/virtual-ref-leaf-and-remove-ancestor",
- specific_virtual_ref_leaf_and_remove_ancestor);
-
- g_test_add_func ("/TreeModelFilter/specific/bug-301558",
- specific_bug_301558);
- g_test_add_func ("/TreeModelFilter/specific/bug-311955",
- specific_bug_311955);
- g_test_add_func ("/TreeModelFilter/specific/bug-311955-clean",
- specific_bug_311955_clean);
- g_test_add_func ("/TreeModelFilter/specific/bug-346800",
- specific_bug_346800);
- g_test_add_func ("/TreeModelFilter/specific/bug-464173",
- specific_bug_464173);
- g_test_add_func ("/TreeModelFilter/specific/bug-540201",
- specific_bug_540201);
- g_test_add_func ("/TreeModelFilter/specific/bug-549287",
- specific_bug_549287);
- g_test_add_func ("/TreeModelFilter/specific/bug-621076",
- specific_bug_621076);
- g_test_add_func ("/TreeModelFilter/specific/bug-657353-related",
- specific_bug_657353_related);
- g_test_add_func ("/TreeModelFilter/specific/bug-657353",
- specific_bug_657353);
- g_test_add_func ("/TreeModelFilter/specific/bug-658696",
- specific_bug_658696);
- g_test_add_func ("/TreeModelFilter/specific/bug-659022/row-changed-emission",
- specific_bug_659022_row_changed_emission);
- g_test_add_func ("/TreeModelFilter/specific/bug-659022/row-deleted-node-invisible",
- specific_bug_659022_row_deleted_node_invisible);
- g_test_add_func ("/TreeModelFilter/specific/bug-659022/row-deleted-free-level",
- specific_bug_659022_row_deleted_free_level);
- g_test_add_func ("/TreeModelFilter/specific/bug-679910",
- specific_bug_679910);
-}
diff --git a/gtk/tests/floating.c b/gtk/tests/floating.c
deleted file mode 100644
index 89add67f49..0000000000
--- a/gtk/tests/floating.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* floatingtest.c - test floating flag uses
- * Copyright (C) 2005 Tim Janik
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <gtk/gtk.h>
-
-static gboolean destroyed = FALSE;
-static void
-destroy (void)
-{
- destroyed = TRUE;
-}
-
-static void
-floating_tests (void)
-{
- GtkWidget *widget = g_object_new (GTK_TYPE_LABEL, NULL);
- g_object_connect (widget, "signal::destroy", destroy, NULL, NULL);
-
- g_assert (g_object_is_floating (widget));
-
- g_object_ref_sink (widget);
- g_assert (!g_object_is_floating (widget));
-
- g_object_force_floating (G_OBJECT (widget));
- g_assert (g_object_is_floating (widget));
-
- g_object_ref_sink (widget);
- g_assert (!g_object_is_floating (widget));
-
- g_assert (!destroyed);
- g_object_unref (widget);
- g_assert (destroyed);
-}
-
-int
-main (int argc,
- char *argv[])
-{
- gtk_test_init (&argc, &argv);
- g_test_add_func ("/floatingtest", floating_tests);
- return g_test_run();
-}
diff --git a/gtk/tests/grid.c b/gtk/tests/grid.c
deleted file mode 100644
index 436cfa30f2..0000000000
--- a/gtk/tests/grid.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 2011 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-/* test that attach_next_to picks the places
- * we expect it to pick, when there is any choice
- */
-static void
-test_attach (void)
-{
- GtkGrid *g;
- GtkWidget *child, *sibling, *z, *A, *B;
- gint left, top, width, height;
-
- g = (GtkGrid *)gtk_grid_new ();
-
- child = gtk_label_new ("a");
- gtk_grid_attach_next_to (g, child, NULL, GTK_POS_LEFT, 1, 1);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, -1);
- g_assert_cmpint (top, ==, 0);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 1);
-
- sibling = child;
- child = gtk_label_new ("b");
- gtk_grid_attach_next_to (g, child, sibling, GTK_POS_RIGHT, 2, 2);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 0);
- g_assert_cmpint (top, ==, 0);
- g_assert_cmpint (width, ==, 2);
- g_assert_cmpint (height, ==, 2);
-
- /* this one should just be ignored */
- z = gtk_label_new ("z");
- gtk_grid_attach (g, z, 4, 4, 1, 1);
-
- child = gtk_label_new ("c");
- gtk_grid_attach_next_to (g, child, sibling, GTK_POS_BOTTOM, 3, 1);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, -1);
- g_assert_cmpint (top, ==, 1);
- g_assert_cmpint (width, ==, 3);
- g_assert_cmpint (height, ==, 1);
-
- child = gtk_label_new ("u");
- gtk_grid_attach_next_to (g, child, z, GTK_POS_LEFT, 2, 1);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 2);
- g_assert_cmpint (top, ==, 4);
- g_assert_cmpint (width, ==, 2);
- g_assert_cmpint (height, ==, 1);
-
- child = gtk_label_new ("v");
- gtk_grid_attach_next_to (g, child, z, GTK_POS_RIGHT, 2, 1);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 5);
- g_assert_cmpint (top, ==, 4);
- g_assert_cmpint (width, ==, 2);
- g_assert_cmpint (height, ==, 1);
-
- child = gtk_label_new ("x");
- gtk_grid_attach_next_to (g, child, z, GTK_POS_TOP, 1, 2);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 4);
- g_assert_cmpint (top, ==, 2);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 2);
-
- child = gtk_label_new ("x");
- gtk_grid_attach_next_to (g, child, z, GTK_POS_TOP, 1, 2);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 4);
- g_assert_cmpint (top, ==, 2);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 2);
-
- child = gtk_label_new ("y");
- gtk_grid_attach_next_to (g, child, z, GTK_POS_BOTTOM, 1, 2);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 4);
- g_assert_cmpint (top, ==, 5);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 2);
-
- A = gtk_label_new ("A");
- gtk_grid_attach (g, A, 10, 10, 1, 1);
- B = gtk_label_new ("B");
- gtk_grid_attach (g, B, 10, 12, 1, 1);
-
- child = gtk_label_new ("D");
- gtk_grid_attach_next_to (g, child, A, GTK_POS_RIGHT, 1, 3);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 11);
- g_assert_cmpint (top, ==, 10);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 3);
-}
-
-static void
-test_add (void)
-{
- GtkGrid *g;
- GtkWidget *child;
- gint left, top, width, height;
-
- g = (GtkGrid *)gtk_grid_new ();
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (g), GTK_ORIENTATION_HORIZONTAL);
-
- child = gtk_label_new ("a");
- gtk_container_add (GTK_CONTAINER (g), child);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 0);
- g_assert_cmpint (top, ==, 0);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 1);
-
- child = gtk_label_new ("b");
- gtk_container_add (GTK_CONTAINER (g), child);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 1);
- g_assert_cmpint (top, ==, 0);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 1);
-
- child = gtk_label_new ("c");
- gtk_container_add (GTK_CONTAINER (g), child);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 2);
- g_assert_cmpint (top, ==, 0);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 1);
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (g), GTK_ORIENTATION_VERTICAL);
-
- child = gtk_label_new ("d");
- gtk_container_add (GTK_CONTAINER (g), child);
- gtk_container_child_get (GTK_CONTAINER (g), child,
- "left-attach", &left,
- "top-attach", &top,
- "width", &width,
- "height", &height,
- NULL);
- g_assert_cmpint (left, ==, 0);
- g_assert_cmpint (top, ==, 1);
- g_assert_cmpint (width, ==, 1);
- g_assert_cmpint (height, ==, 1);
-}
-
-int
-main (int argc,
- char *argv[])
-{
- gtk_test_init (&argc, &argv);
-
- g_test_add_func ("/grid/attach", test_attach);
- g_test_add_func ("/grid/add", test_add);
-
- return g_test_run();
-}
diff --git a/gtk/tests/gtkmenu.c b/gtk/tests/gtkmenu.c
deleted file mode 100644
index e2667ba135..0000000000
--- a/gtk/tests/gtkmenu.c
+++ /dev/null
@@ -1,452 +0,0 @@
-#include <gtk/gtk.h>
-
-/* TestItem {{{1 */
-
-/* This utility struct is used by both the RandomMenu and MirrorMenu
- * class implementations below.
- */
-typedef struct {
- GHashTable *attributes;
- GHashTable *links;
-} TestItem;
-
-static TestItem *
-test_item_new (GHashTable *attributes,
- GHashTable *links)
-{
- TestItem *item;
-
- item = g_slice_new (TestItem);
- item->attributes = g_hash_table_ref (attributes);
- item->links = g_hash_table_ref (links);
-
- return item;
-}
-
-static void
-test_item_free (gpointer data)
-{
- TestItem *item = data;
-
- g_hash_table_unref (item->attributes);
- g_hash_table_unref (item->links);
-
- g_slice_free (TestItem, item);
-}
-
-/* RandomMenu {{{1 */
-#define MAX_ITEMS 10
-#define TOP_ORDER 4
-
-typedef struct {
- GMenuModel parent_instance;
-
- GSequence *items;
- gint order;
-} RandomMenu;
-
-typedef GMenuModelClass RandomMenuClass;
-
-static GType random_menu_get_type (void);
-G_DEFINE_TYPE (RandomMenu, random_menu, G_TYPE_MENU_MODEL);
-
-static gboolean
-random_menu_is_mutable (GMenuModel *model)
-{
- return TRUE;
-}
-
-static gint
-random_menu_get_n_items (GMenuModel *model)
-{
- RandomMenu *menu = (RandomMenu *) model;
-
- return g_sequence_get_length (menu->items);
-}
-
-static void
-random_menu_get_item_attributes (GMenuModel *model,
- gint position,
- GHashTable **table)
-{
- RandomMenu *menu = (RandomMenu *) model;
- TestItem *item;
-
- item = g_sequence_get (g_sequence_get_iter_at_pos (menu->items, position));
- *table = g_hash_table_ref (item->attributes);
-}
-
-static void
-random_menu_get_item_links (GMenuModel *model,
- gint position,
- GHashTable **table)
-{
- RandomMenu *menu = (RandomMenu *) model;
- TestItem *item;
-
- item = g_sequence_get (g_sequence_get_iter_at_pos (menu->items, position));
- *table = g_hash_table_ref (item->links);
-}
-
-static void
-random_menu_finalize (GObject *object)
-{
- RandomMenu *menu = (RandomMenu *) object;
-
- g_sequence_free (menu->items);
-
- G_OBJECT_CLASS (random_menu_parent_class)
- ->finalize (object);
-}
-
-static void
-random_menu_init (RandomMenu *menu)
-{
-}
-
-static void
-random_menu_class_init (GMenuModelClass *class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
-
- class->is_mutable = random_menu_is_mutable;
- class->get_n_items = random_menu_get_n_items;
- class->get_item_attributes = random_menu_get_item_attributes;
- class->get_item_links = random_menu_get_item_links;
-
- object_class->finalize = random_menu_finalize;
-}
-
-static RandomMenu * random_menu_new (GRand *rand, gint order);
-
-static void
-random_menu_change (RandomMenu *menu,
- GRand *rand)
-{
- gint position, removes, adds;
- GSequenceIter *point;
- gint n_items;
- gint i;
-
- n_items = g_sequence_get_length (menu->items);
-
- do
- {
- position = g_rand_int_range (rand, 0, n_items + 1);
- removes = g_rand_int_range (rand, 0, n_items - position + 1);
- adds = g_rand_int_range (rand, 0, MAX_ITEMS - (n_items - removes) + 1);
- }
- while (removes == 0 && adds == 0);
-
- point = g_sequence_get_iter_at_pos (menu->items, position + removes);
-
- if (removes)
- {
- GSequenceIter *start;
-
- start = g_sequence_get_iter_at_pos (menu->items, position);
- g_sequence_remove_range (start, point);
- }
-
- for (i = 0; i < adds; i++)
- {
- const gchar *label;
- GHashTable *links;
- GHashTable *attributes;
-
- attributes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref);
- links = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_object_unref);
-
- if (menu->order > 0 && g_rand_boolean (rand))
- {
- RandomMenu *child;
- const gchar *subtype;
-
- child = random_menu_new (rand, menu->order - 1);
-
- if (g_rand_boolean (rand))
- {
- subtype = G_MENU_LINK_SECTION;
- /* label some section headers */
- if (g_rand_boolean (rand))
- label = "Section";
- else
- label = NULL;
- }
- else
- {
- /* label all submenus */
- subtype = G_MENU_LINK_SUBMENU;
- label = "Submenu";
- }
-
- g_hash_table_insert (links, g_strdup (subtype), child);
- }
- else
- /* label all terminals */
- label = "Menu Item";
-
- if (label)
- g_hash_table_insert (attributes, g_strdup ("label"), g_variant_ref_sink (g_variant_new_string (label)));
-
- g_sequence_insert_before (point, test_item_new (attributes, links));
- g_hash_table_unref (links);
- g_hash_table_unref (attributes);
- }
-
- g_menu_model_items_changed (G_MENU_MODEL (menu), position, removes, adds);
-}
-
-static RandomMenu *
-random_menu_new (GRand *rand,
- gint order)
-{
- RandomMenu *menu;
-
- menu = g_object_new (random_menu_get_type (), NULL);
- menu->items = g_sequence_new (test_item_free);
- menu->order = order;
-
- random_menu_change (menu, rand);
-
- return menu;
-}
-
-/* Test cases {{{1 */
-
-static void assert_menu_equality (GtkContainer *container, GMenuModel *model);
-
-static const gchar *
-get_label (GtkMenuItem *item)
-{
- GList *children = gtk_container_get_children (GTK_CONTAINER (item));
- const gchar *label = NULL;
-
- while (children)
- {
- if (GTK_IS_CONTAINER (children->data))
- children = g_list_concat (children, gtk_container_get_children (children->data));
- else if (GTK_IS_LABEL (children->data))
- label = gtk_label_get_text (children->data);
-
- children = g_list_delete_link (children, children);
- }
-
- return label;
-}
-
-/* a bit complicated with the separators...
- *
- * with_separators are if subsections of this GMenuModel should have
- * separators inserted between them (ie: in the same sense as the
- * 'with_separators' argument to gtk_menu_shell_bind_model().
- *
- * needs_separator is true if this particular section needs to have a
- * separator before it in the case that it is non-empty. this will be
- * defined for all subsections of a with_separators menu (except the
- * first) or in case section_header is non-%NULL.
- *
- * section_header is the label that must be inside that separator, if it
- * exists. section_header is only non-%NULL if needs_separator is also
- * TRUE.
- */
-static void
-assert_section_equality (GSList **children,
- gboolean with_separators,
- gboolean needs_separator,
- const gchar *section_header,
- GMenuModel *model)
-{
- gboolean has_separator;
- GSList *our_children;
- gint i, n;
-
- /* Assuming that we have the possibility of showing a separator, there
- * are two valid situations:
- *
- * - we have a separator and we have other children
- *
- * - we have no separator and no children
- *
- * If we see a separator, we suppose that it is ours and that we will
- * encounter children. In the case that we have no children, the
- * separator may not be ours but may rather belong to a later section.
- *
- * We therefore keep our own copy of the children GSList. If we
- * encounter children, we will delete the links that this section is
- * responsible for and update the pass-by-reference value. Otherwise,
- * we will leave everything alone and let the separator be accounted
- * for by a following section.
- */
- our_children = *children;
- if (needs_separator && GTK_IS_SEPARATOR_MENU_ITEM (our_children->data))
- {
- /* We accounted for the separator, at least for now, so remove it
- * from the list.
- *
- * We will check later if we should have actually had a separator
- * and compare the result to has_separator.
- */
- our_children = our_children->next;
- has_separator = TRUE;
- }
- else
- has_separator = FALSE;
-
- /* Now, iterate the model checking that the items in the GSList line
- * up with our expectations. */
- n = g_menu_model_get_n_items (model);
- for (i = 0; i < n; i++)
- {
- GMenuModel *subsection;
- GMenuModel *submenu;
- gchar *label = NULL;
-
- subsection = g_menu_model_get_item_link (model, i, G_MENU_LINK_SECTION);
- submenu = g_menu_model_get_item_link (model, i, G_MENU_LINK_SUBMENU);
- g_menu_model_get_item_attribute (model, i, G_MENU_ATTRIBUTE_LABEL, "s", &label);
-
- if (subsection)
- {
- g_assert (!submenu);
- assert_section_equality (&our_children,
- FALSE, /* with_separators */
- label || (with_separators && i > 0), /* needs_separator */
- label, /* section_header */
- subsection);
- g_object_unref (subsection);
- }
- else
- {
- GtkWidget *submenu_widget;
- GtkMenuItem *item;
-
- /* This is a normal item. Make sure the label is right. */
- item = our_children->data;
- our_children = g_slist_remove (our_children, item);
-
- /* get_label() returns "" when it ought to return NULL */
- g_assert_cmpstr (get_label (item), ==, label ? label : "");
- submenu_widget = gtk_menu_item_get_submenu (item);
-
- if (submenu)
- {
- g_assert (submenu_widget != NULL);
- assert_menu_equality (GTK_CONTAINER (submenu_widget), submenu);
- g_object_unref (submenu);
- }
- else
- g_assert (!submenu_widget);
- }
-
- g_free (label);
- }
-
- /* If we found a separator but visited no children then the separator
- * was not for us. Patch that up.
- */
- if (has_separator && our_children == (*children)->next)
- {
- /* Rewind our_children to put the separator we tentatively
- * consumed back into the list.
- */
- our_children = *children;
- has_separator = FALSE;
- }
-
- if (our_children == *children)
- /* If we had no children then we didn't really need a separator. */
- needs_separator = FALSE;
-
- g_assert (needs_separator == has_separator);
-
- if (has_separator)
- {
- GtkWidget *contents;
- const gchar *label;
-
- /* We needed and had a separator and we visited a child.
- *
- * Make sure that separator was valid.
- */
- contents = gtk_bin_get_child ((*children)->data);
- if (GTK_IS_LABEL (contents))
- label = gtk_label_get_label (GTK_LABEL (contents));
- else
- label = "";
-
- /* get_label() returns "" when it ought to return NULL */
- g_assert_cmpstr (label, ==, section_header ? section_header : "");
-
- /* our_children has already gone (possibly far) past *children, so
- * we need to free up the link that we left behind for the
- * separator in case we wanted to rewind.
- */
- g_slist_free_1 (*children);
- }
-
- *children = our_children;
-}
-
-/* We want to use a GSList here instead of a GList because the ->prev
- * pointer updates cause trouble with the way we speculatively deal with
- * separators by skipping over them and coming back to clean up later.
- */
-static void
-get_children_into_slist (GtkWidget *widget,
- gpointer user_data)
-{
- GSList **list_ptr = user_data;
-
- *list_ptr = g_slist_prepend (*list_ptr, widget);
-}
-
-static void
-assert_menu_equality (GtkContainer *container,
- GMenuModel *model)
-{
- GSList *children = NULL;
-
- gtk_container_foreach (container, get_children_into_slist, &children);
- children = g_slist_reverse (children);
-
- assert_section_equality (&children, TRUE, FALSE, NULL, model);
- g_assert (children == NULL);
-}
-
-static void
-test_bind_menu (void)
-{
- RandomMenu *model;
- GtkWidget *menu;
- GRand *rand;
- gint i;
-
- gtk_init (0, 0);
-
- rand = g_rand_new_with_seed (g_test_rand_int ());
- model = random_menu_new (rand, TOP_ORDER);
- menu = gtk_menu_new_from_model (G_MENU_MODEL (model));
- g_object_ref_sink (menu);
- assert_menu_equality (GTK_CONTAINER (menu), G_MENU_MODEL (model));
- for (i = 0; i < 100; i++)
- {
- random_menu_change (model, rand);
- while (g_main_context_iteration (NULL, FALSE));
- assert_menu_equality (GTK_CONTAINER (menu), G_MENU_MODEL (model));
- }
- g_object_unref (model);
- g_object_unref (menu);
- g_rand_free (rand);
-}
-/* Epilogue {{{1 */
-int
-main (int argc, char **argv)
-{
- g_test_init (&argc, &argv, NULL);
-
- g_test_add_func ("/gmenu/bind", test_bind_menu);
-
- return g_test_run ();
-}
-/* vim:set foldmethod=marker: */
diff --git a/gtk/tests/gtktreemodelrefcount.c b/gtk/tests/gtktreemodelrefcount.c
deleted file mode 100644
index 7f29f994e1..0000000000
--- a/gtk/tests/gtktreemodelrefcount.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/* gtktreemodelrefcount.c
- * Copyright (C) 2011 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-#include "gtktreemodelrefcount.h"
-
-
-/* The purpose of this GtkTreeModel is to keep record of the reference count
- * of each node. The reference count does not effect the functioning of
- * the model in any way. Because this model is a subclass of GtkTreeStore,
- * the GtkTreeStore API should be used to add to and remove nodes from
- * this model. We depend on the iter format of GtkTreeStore, which means
- * that this model needs to be revised in case the iter format of
- * GtkTreeStore is modified. Currently, we make use of the fact that
- * the value stored in the user_data field is unique for each node.
- */
-
-struct _GtkTreeModelRefCountPrivate
-{
- GHashTable *node_hash;
-};
-
-typedef struct
-{
- int ref_count;
-}
-NodeInfo;
-
-
-static void gtk_tree_model_ref_count_tree_model_init (GtkTreeModelIface *iface);
-static void gtk_tree_model_ref_count_finalize (GObject *object);
-
-static NodeInfo *node_info_new (void);
-static void node_info_free (NodeInfo *info);
-
-/* GtkTreeModel interface */
-static void gtk_tree_model_ref_count_ref_node (GtkTreeModel *model,
- GtkTreeIter *iter);
-static void gtk_tree_model_ref_count_unref_node (GtkTreeModel *model,
- GtkTreeIter *iter);
-
-
-G_DEFINE_TYPE_WITH_CODE (GtkTreeModelRefCount, gtk_tree_model_ref_count, GTK_TYPE_TREE_STORE,
- G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
- gtk_tree_model_ref_count_tree_model_init))
-
-static void
-row_removed (GtkTreeModelRefCount *ref_model,
- GtkTreePath *path)
-{
- GHashTableIter iter;
- GtkTreeIter tree_iter;
-
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ref_model), &tree_iter))
- {
- g_hash_table_remove_all (ref_model->priv->node_hash);
- return;
- }
-
- g_hash_table_iter_init (&iter, ref_model->priv->node_hash);
-
- while (g_hash_table_iter_next (&iter, &tree_iter.user_data, NULL))
- {
- if (!gtk_tree_store_iter_is_valid (GTK_TREE_STORE (ref_model), &tree_iter))
- g_hash_table_iter_remove (&iter);
- }
-}
-
-static void
-gtk_tree_model_ref_count_init (GtkTreeModelRefCount *ref_model)
-{
- ref_model->priv = G_TYPE_INSTANCE_GET_PRIVATE (ref_model,
- GTK_TYPE_TREE_MODEL_REF_COUNT,
- GtkTreeModelRefCountPrivate);
-
- ref_model->priv->node_hash = g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- NULL,
- (GDestroyNotify)node_info_free);
-
- g_signal_connect (ref_model, "row-deleted", G_CALLBACK (row_removed), NULL);
-}
-
-static void
-gtk_tree_model_ref_count_class_init (GtkTreeModelRefCountClass *ref_model_class)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass *) ref_model_class;
-
- object_class->finalize = gtk_tree_model_ref_count_finalize;
-
- g_type_class_add_private (object_class, sizeof (GtkTreeModelRefCountPrivate));
-}
-
-static void
-gtk_tree_model_ref_count_tree_model_init (GtkTreeModelIface *iface)
-{
- iface->ref_node = gtk_tree_model_ref_count_ref_node;
- iface->unref_node = gtk_tree_model_ref_count_unref_node;
-}
-
-static void
-gtk_tree_model_ref_count_finalize (GObject *object)
-{
- GtkTreeModelRefCount *ref_model = GTK_TREE_MODEL_REF_COUNT (object);
-
- if (ref_model->priv->node_hash)
- {
- g_hash_table_destroy (ref_model->priv->node_hash);
- ref_model->priv->node_hash = NULL;
- }
-
- G_OBJECT_CLASS (gtk_tree_model_ref_count_parent_class)->finalize (object);
-}
-
-
-static NodeInfo *
-node_info_new (void)
-{
- NodeInfo *info = g_slice_new (NodeInfo);
- info->ref_count = 0;
-
- return info;
-}
-
-static void
-node_info_free (NodeInfo *info)
-{
- g_slice_free (NodeInfo, info);
-}
-
-static void
-gtk_tree_model_ref_count_ref_node (GtkTreeModel *model,
- GtkTreeIter *iter)
-{
- NodeInfo *info;
- GtkTreeModelRefCount *ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- info = g_hash_table_lookup (ref_model->priv->node_hash, iter->user_data);
- if (!info)
- {
- info = node_info_new ();
-
- g_hash_table_insert (ref_model->priv->node_hash, iter->user_data, info);
- }
-
- info->ref_count++;
-}
-
-static void
-gtk_tree_model_ref_count_unref_node (GtkTreeModel *model,
- GtkTreeIter *iter)
-{
- NodeInfo *info;
- GtkTreeModelRefCount *ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- info = g_hash_table_lookup (ref_model->priv->node_hash, iter->user_data);
- g_assert (info != NULL);
- g_assert (info->ref_count > 0);
-
- info->ref_count--;
-}
-
-
-GtkTreeModel *
-gtk_tree_model_ref_count_new (void)
-{
- GtkTreeModel *retval;
-
- retval = g_object_new (gtk_tree_model_ref_count_get_type (), NULL);
-
- return retval;
-}
-
-static void
-dump_iter (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *iter)
-{
- gchar *path_str;
- NodeInfo *info;
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (ref_model), iter);
- path_str = gtk_tree_path_to_string (path);
- gtk_tree_path_free (path);
-
- info = g_hash_table_lookup (ref_model->priv->node_hash, iter->user_data);
- if (!info)
- g_print ("%-16s ref_count=0\n", path_str);
- else
- g_print ("%-16s ref_count=%d\n", path_str, info->ref_count);
-
- g_free (path_str);
-}
-
-static void
-gtk_tree_model_ref_count_dump_recurse (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *iter)
-{
- do
- {
- GtkTreeIter child;
-
- dump_iter (ref_model, iter);
-
- if (gtk_tree_model_iter_children (GTK_TREE_MODEL (ref_model),
- &child, iter))
- gtk_tree_model_ref_count_dump_recurse (ref_model, &child);
- }
- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (ref_model), iter));
-}
-
-void
-gtk_tree_model_ref_count_dump (GtkTreeModelRefCount *ref_model)
-{
- GtkTreeIter iter;
-
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ref_model), &iter))
- return;
-
- gtk_tree_model_ref_count_dump_recurse (ref_model, &iter);
-}
-
-static gboolean
-check_iter (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *iter,
- gint expected_ref_count,
- gboolean may_assert)
-{
- NodeInfo *info;
-
- if (may_assert)
- g_assert (gtk_tree_store_iter_is_valid (GTK_TREE_STORE (ref_model), iter));
-
- info = g_hash_table_lookup (ref_model->priv->node_hash, iter->user_data);
- if (!info)
- {
- if (expected_ref_count == 0)
- return TRUE;
- else
- {
- if (may_assert)
- g_error ("Expected ref count %d, but node has never been referenced.\n", expected_ref_count);
- return FALSE;
- }
- }
-
- if (may_assert)
- {
- if (expected_ref_count == 0)
- g_assert_cmpint (expected_ref_count, ==, info->ref_count);
- else
- g_assert_cmpint (expected_ref_count, <=, info->ref_count);
- }
-
- return expected_ref_count == info->ref_count;
-}
-
-gboolean
-gtk_tree_model_ref_count_check_level (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *parent,
- gint expected_ref_count,
- gboolean recurse,
- gboolean may_assert)
-{
- GtkTreeIter iter;
-
- if (!gtk_tree_model_iter_children (GTK_TREE_MODEL (ref_model),
- &iter, parent))
- return TRUE;
-
- do
- {
- if (!check_iter (ref_model, &iter, expected_ref_count, may_assert))
- return FALSE;
-
- if (recurse &&
- gtk_tree_model_iter_has_child (GTK_TREE_MODEL (ref_model), &iter))
- {
- if (!gtk_tree_model_ref_count_check_level (ref_model, &iter,
- expected_ref_count,
- recurse, may_assert))
- return FALSE;
- }
- }
- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (ref_model), &iter));
-
- return TRUE;
-}
-
-gboolean
-gtk_tree_model_ref_count_check_node (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *iter,
- gint expected_ref_count,
- gboolean may_assert)
-{
- return check_iter (ref_model, iter, expected_ref_count, may_assert);
-}
diff --git a/gtk/tests/gtktreemodelrefcount.h b/gtk/tests/gtktreemodelrefcount.h
deleted file mode 100644
index a4b4011a24..0000000000
--- a/gtk/tests/gtktreemodelrefcount.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* gtktreemodelrefcount.h
- * Copyright (C) 2011 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __GTK_TREE_MODEL_REF_COUNT_H__
-#define __GTK_TREE_MODEL_REF_COUNT_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_TREE_MODEL_REF_COUNT (gtk_tree_model_ref_count_get_type ())
-#define GTK_TREE_MODEL_REF_COUNT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_MODEL_REF_COUNT, GtkTreeModelRefCount))
-#define GTK_TREE_MODEL_REF_COUNT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), GTK_TYPE_TREE_MODEL_REF_COUNT, GtkTreeModelRefCountClass))
-#define GTK_IS_TREE_MODEL_REF_COUNT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_MODEL_REF_COUNT))
-#define GTK_IS_TREE_MODEL_REF_COUNT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), GTK_TYPE_TREE_MODEL_REF_COUNT))
-#define GTK_TREE_MODEL_REF_COUNT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TREE_MODEL_REF_COUNT, GtkTreeModelRefCountClass))
-
-
-typedef struct _GtkTreeModelRefCount GtkTreeModelRefCount;
-typedef struct _GtkTreeModelRefCountClass GtkTreeModelRefCountClass;
-typedef struct _GtkTreeModelRefCountPrivate GtkTreeModelRefCountPrivate;
-
-struct _GtkTreeModelRefCount
-{
- GtkTreeStore parent;
-
- /* < private > */
- GtkTreeModelRefCountPrivate *priv;
-};
-
-struct _GtkTreeModelRefCountClass
-{
- GtkTreeStoreClass parent_class;
-};
-
-
-GType gtk_tree_model_ref_count_get_type (void) G_GNUC_CONST;
-GtkTreeModel *gtk_tree_model_ref_count_new (void);
-
-void gtk_tree_model_ref_count_dump (GtkTreeModelRefCount *ref_model);
-gboolean gtk_tree_model_ref_count_check_level (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *parent,
- gint expected_ref_count,
- gboolean recurse,
- gboolean may_assert);
-gboolean gtk_tree_model_ref_count_check_node (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *iter,
- gint expected_ref_count,
- gboolean may_assert);
-
-/* A couple of helpers for the tests. Since this model will never be used
- * outside of unit tests anyway, it is probably fine to have these here
- * without namespacing.
- */
-
-static inline void
-assert_entire_model_unreferenced (GtkTreeModelRefCount *ref_model)
-{
- gtk_tree_model_ref_count_check_level (ref_model, NULL, 0, TRUE, TRUE);
-}
-
-static inline void
-assert_root_level_unreferenced (GtkTreeModelRefCount *ref_model)
-{
- gtk_tree_model_ref_count_check_level (ref_model, NULL, 0, FALSE, TRUE);
-}
-
-static inline void
-assert_level_unreferenced (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *iter)
-{
- gtk_tree_model_ref_count_check_level (ref_model, iter, 0, FALSE, TRUE);
-}
-
-static inline void
-assert_entire_model_referenced (GtkTreeModelRefCount *ref_model,
- gint ref_count)
-{
- gtk_tree_model_ref_count_check_level (ref_model, NULL, ref_count, TRUE, TRUE);
-}
-
-static inline void
-assert_not_entire_model_referenced (GtkTreeModelRefCount *ref_model,
- gint ref_count)
-{
- g_assert_cmpint (gtk_tree_model_ref_count_check_level (ref_model, NULL,
- ref_count,
- TRUE, FALSE),
- ==, FALSE);
-}
-
-static inline void
-assert_root_level_referenced (GtkTreeModelRefCount *ref_model,
- gint ref_count)
-{
- gtk_tree_model_ref_count_check_level (ref_model, NULL, ref_count,
- FALSE, TRUE);
-}
-
-static inline void
-assert_level_referenced (GtkTreeModelRefCount *ref_model,
- gint ref_count,
- GtkTreeIter *iter)
-{
- gtk_tree_model_ref_count_check_level (ref_model, iter, ref_count,
- FALSE, TRUE);
-}
-
-static inline void
-assert_node_ref_count (GtkTreeModelRefCount *ref_model,
- GtkTreeIter *iter,
- gint ref_count)
-{
- gtk_tree_model_ref_count_check_node (ref_model, iter, ref_count, TRUE);
-}
-
-
-#endif /* __GTK_TREE_MODEL_REF_COUNT_H__ */
diff --git a/gtk/tests/keyhash.c b/gtk/tests/keyhash.c
deleted file mode 100644
index 5bca1de98c..0000000000
--- a/gtk/tests/keyhash.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* keyhash.c
- * Copyright (C) 2012 Red Hat, Inc12 Red Hat, Inc
- * Authors: Matthias Clasen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include "../../gtk/gtkkeyhash.h"
-#include "../../gtk/gtkprivate.h"
-
-static gint count;
-
-static void
-counting_destroy (gpointer data)
-{
- count++;
-}
-
-static void
-test_basic (void)
-{
- GtkKeyHash *hash;
- GSList *keys;
-
- count = 0;
- hash = _gtk_key_hash_new (gdk_keymap_get_default (), counting_destroy);
-
- keys = _gtk_key_hash_lookup (hash, 0, 0, 0, 0);
- g_assert (keys == NULL);
-
- _gtk_key_hash_add_entry (hash, 1, 0, NULL);
- _gtk_key_hash_add_entry (hash, 1, 1, NULL);
- _gtk_key_hash_add_entry (hash, 2, 0, NULL);
- _gtk_key_hash_add_entry (hash, 3, 0, NULL);
- _gtk_key_hash_add_entry (hash, 4, 0, NULL);
-
- _gtk_key_hash_free (hash);
-
- g_assert_cmpint (count, ==, 5);
-}
-
-
-#if 0
-typedef struct
-{
- guint keyval;
- GdkModifierType modifiers;
-} Entry;
-
-static void
-test_lookup (GtkKeyHash *hash,
- guint keyval,
- GdkModifierType modifiers,
- GdkModifierType mask,
- gint n_results,
- ...)
-{
- va_list ap;
- gint d;
- GSList *res, *l;
- gint i;
- GdkKeymapKey *keys;
- gint n_keys;
-
- gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (), keyval, &keys, &n_keys);
- if (n_keys == 0)
- return;
-
- res = _gtk_key_hash_lookup (hash, keys[0].keycode, modifiers, mask, keys[0].group);
- g_free (keys);
-
- g_assert_cmpint (g_slist_length (res), ==, n_results);
-
- va_start (ap, n_results);
- for (i = 0, l = res; i < n_results; i++, l = l->next)
- {
- d = va_arg (ap, int);
- g_assert_cmpint (d, ==, GPOINTER_TO_INT (l->data));
- }
- va_end (ap);
-
- g_slist_free (res);
-}
-
-static void
-add_entries (GtkKeyHash *hash,
- Entry *entries)
-{
- gint i;
-
- for (i = 0; entries[i].keyval; i++)
- _gtk_key_hash_add_entry (hash, entries[i].keyval, entries[i].modifiers, GINT_TO_POINTER (i+1));
-}
-
-#define DEFAULT_MASK (GDK_CONTROL_MASK \
- | GDK_SHIFT_MASK \
- | GDK_MOD1_MASK \
- | GDK_SUPER_MASK \
- | GDK_HYPER_MASK \
- | GDK_META_MASK)
-
-static void
-test_match (void)
-{
- GtkKeyHash *hash;
- static Entry entries[] = {
- { GDK_KEY_a, GDK_CONTROL_MASK },
- { GDK_KEY_a, GDK_CONTROL_MASK|GDK_SHIFT_MASK } ,
- { GDK_KEY_b, GDK_MOD1_MASK|GDK_CONTROL_MASK },
- { GDK_KEY_F10, 0 },
- { 0, 0 }
- };
-
- hash = _gtk_key_hash_new (gdk_keymap_get_default (), NULL);
- add_entries (hash, entries);
-
- test_lookup (hash, GDK_KEY_a, GDK_CONTROL_MASK, DEFAULT_MASK, 4, 1, 1, 2, 2);
- test_lookup (hash, GDK_KEY_A, GDK_CONTROL_MASK, DEFAULT_MASK, 4, 1, 1, 2, 2);
- test_lookup (hash, GDK_KEY_a, GDK_MOD1_MASK, DEFAULT_MASK, 0);
- test_lookup (hash, GDK_KEY_F10, 0, DEFAULT_MASK, 4, 4, 4, 4, 4);
- test_lookup (hash, GDK_KEY_F10, GDK_SHIFT_MASK, DEFAULT_MASK, 4, 4, 4, 4, 4);
-
- _gtk_key_hash_free (hash);
-}
-
-static gboolean
-hyper_equals_super (void)
-{
- GdkModifierType mods1, mods2;
-
- mods1 = GDK_HYPER_MASK;
- gdk_keymap_map_virtual_modifiers (gdk_keymap_get_default (), &mods1);
- mods1 = mods1 & ~GDK_HYPER_MASK;
- mods2 = GDK_SUPER_MASK;
- gdk_keymap_map_virtual_modifiers (gdk_keymap_get_default (), &mods2);
- mods2 = mods2 & ~GDK_SUPER_MASK;
-
- return mods1 == mods2;
-}
-
-static void
-test_virtual (void)
-{
- GtkKeyHash *hash;
- static Entry entries[] = {
- { GDK_KEY_a, GDK_SUPER_MASK },
- { GDK_KEY_b, GDK_HYPER_MASK } ,
- { GDK_KEY_c, GDK_META_MASK },
- { GDK_KEY_d, GDK_SUPER_MASK|GDK_HYPER_MASK },
- { 0, 0 }
- };
-
- hash = _gtk_key_hash_new (gdk_keymap_get_default (), NULL);
- add_entries (hash, entries);
-
- test_lookup (hash, GDK_KEY_a, GDK_SUPER_MASK, DEFAULT_MASK, 2, 1, 1);
- test_lookup (hash, GDK_KEY_a, GDK_HYPER_MASK, DEFAULT_MASK, 0);
- test_lookup (hash, GDK_KEY_b, GDK_HYPER_MASK, DEFAULT_MASK, 2, 2, 2);
- test_lookup (hash, GDK_KEY_c, GDK_META_MASK, DEFAULT_MASK, 2, 3, 3);
- if (hyper_equals_super ())
- {
- GdkModifierType mods;
-
- /* test that colocated virtual modifiers don't count twice */
- test_lookup (hash, GDK_KEY_d, GDK_SUPER_MASK, DEFAULT_MASK, 0);
- test_lookup (hash, GDK_KEY_d, GDK_HYPER_MASK, DEFAULT_MASK, 0);
-
- mods = GDK_HYPER_MASK;
- gdk_keymap_map_virtual_modifiers (gdk_keymap_get_default (), &mods);
- test_lookup (hash, GDK_KEY_d, mods, DEFAULT_MASK, 0);
- }
-
- _gtk_key_hash_free (hash);
-}
-#endif
-
-int
-main (int argc, char **argv)
-{
- /* initialize test program */
- gtk_test_init (&argc, &argv);
-
- g_test_add_func ("/keyhash/basic", test_basic);
-#if 0
- /* FIXME: need to make these independent of xkb configuration */
- g_test_add_func ("/keyhash/match", test_match);
- g_test_add_func ("/keyhash/virtual", test_virtual);
-#endif
- return g_test_run();
-}
diff --git a/gtk/tests/liststore.c b/gtk/tests/liststore.c
deleted file mode 100644
index 4455a13dff..0000000000
--- a/gtk/tests/liststore.c
+++ /dev/null
@@ -1,1139 +0,0 @@
-/* Extensive GtkListStore tests.
- * Copyright (C) 2007 Imendio AB
- * Authors: Kristian Rietveld <kris@imendio.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* To do:
- * - Test implementations of the interfaces: DnD, sortable, buildable
- * and the tree model interface itself?
- * - Need to check if the emitted signals are right.
- * - Needs analysis with the code coverage tool once it is there.
- */
-
-#include <gtk/gtk.h>
-
-#include "treemodel.h"
-
-static inline gboolean
-iters_equal (GtkTreeIter *a,
- GtkTreeIter *b)
-{
- if (a->stamp != b->stamp)
- return FALSE;
-
- if (a->user_data != b->user_data)
- return FALSE;
-
- /* user_data2 and user_data3 are not used in GtkListStore */
-
- return TRUE;
-}
-
-static gboolean
-iter_position (GtkListStore *store,
- GtkTreeIter *iter,
- int n)
-{
- gboolean ret = TRUE;
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), iter);
- if (!path)
- return FALSE;
-
- if (gtk_tree_path_get_indices (path)[0] != n)
- ret = FALSE;
-
- gtk_tree_path_free (path);
-
- return ret;
-}
-
-/*
- * Fixture
- */
-typedef struct
-{
- GtkTreeIter iter[5];
- GtkListStore *store;
-} ListStore;
-
-static void
-list_store_setup (ListStore *fixture,
- gconstpointer test_data)
-{
- int i;
-
- fixture->store = gtk_list_store_new (1, G_TYPE_INT);
-
- for (i = 0; i < 5; i++)
- {
- gtk_list_store_insert (fixture->store, &fixture->iter[i], i);
- gtk_list_store_set (fixture->store, &fixture->iter[i], 0, i, -1);
- }
-}
-
-static void
-list_store_teardown (ListStore *fixture,
- gconstpointer test_data)
-{
- g_object_unref (fixture->store);
-}
-
-/*
- * The actual tests.
- */
-
-static void
-check_model (ListStore *fixture,
- gint *new_order,
- gint skip)
-{
- int i;
- GtkTreePath *path;
-
- path = gtk_tree_path_new ();
- gtk_tree_path_down (path);
-
- /* Check validity of the model and validity of the iters-persistent
- * claim.
- */
- for (i = 0; i < 5; i++)
- {
- GtkTreeIter iter;
-
- if (i == skip)
- continue;
-
- /* The saved iterator at new_order[i] should match the iterator
- * at i.
- */
-
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &iter, path);
-
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &iter));
- g_assert (iters_equal (&iter, &fixture->iter[new_order[i]]));
-
- gtk_tree_path_next (path);
- }
-
- gtk_tree_path_free (path);
-}
-
-/* insertion */
-static void
-list_store_test_insert_high_values (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- gtk_list_store_insert (store, &iter, 1234);
- g_assert (gtk_list_store_iter_is_valid (store, &iter));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 1);
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- gtk_list_store_insert (store, &iter2, 765);
- g_assert (gtk_list_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-list_store_test_append (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- gtk_list_store_append (store, &iter);
- g_assert (gtk_list_store_iter_is_valid (store, &iter));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 1);
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- gtk_list_store_append (store, &iter2);
- g_assert (gtk_list_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-list_store_test_prepend (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- gtk_list_store_prepend (store, &iter);
- g_assert (gtk_list_store_iter_is_valid (store, &iter));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 1);
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- gtk_list_store_prepend (store, &iter2);
- g_assert (gtk_list_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-list_store_test_insert_after (void)
-{
- GtkTreeIter iter, iter2, iter3;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_append (store, &iter2);
-
- gtk_list_store_insert_after (store, &iter3, &iter);
- g_assert (gtk_list_store_iter_is_valid (store, &iter3));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 3);
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 1));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 2));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 2));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 2));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-list_store_test_insert_after_NULL (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- gtk_list_store_append (store, &iter);
-
- /* move_after NULL is basically a prepend */
- gtk_list_store_insert_after (store, &iter2, NULL);
- g_assert (gtk_list_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 0));
- g_assert (iters_equal (&iter2, &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-list_store_test_insert_before (void)
-{
- GtkTreeIter iter, iter2, iter3;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_append (store, &iter2);
-
- gtk_list_store_insert_before (store, &iter3, &iter2);
- g_assert (gtk_list_store_iter_is_valid (store, &iter3));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 3);
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 1));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 2));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter3, &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 2));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 2));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-list_store_test_insert_before_NULL (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- gtk_list_store_append (store, &iter);
-
- /* move_before NULL is basically an append */
- gtk_list_store_insert_before (store, &iter2, NULL);
- g_assert (gtk_list_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-/* setting values */
-static void
-list_store_set_gvalue_to_transform (void)
-{
- GtkListStore *store;
- GtkTreeIter iter;
- GValue value = G_VALUE_INIT;
-
- /* https://bugzilla.gnome.org/show_bug.cgi?id=677649 */
- store = gtk_list_store_new (1, G_TYPE_LONG);
- gtk_list_store_append (store, &iter);
-
- g_value_init (&value, G_TYPE_INT);
- g_value_set_int (&value, 42);
- gtk_list_store_set_value (store, &iter, 0, &value);
-}
-
-/* removal */
-static void
-list_store_test_remove_begin (ListStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { -1, 1, 2, 3, 4 };
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* Remove node at 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_list_store_remove (fixture->store, &iter) == TRUE);
- g_assert (!gtk_list_store_iter_is_valid (fixture->store, &fixture->iter[0]));
- g_assert (iters_equal (&iter, &fixture->iter[1]));
-
- check_model (fixture, new_order, 0);
-}
-
-static void
-list_store_test_remove_middle (ListStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { 0, 1, -1, 3, 4 };
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* Remove node at 2 */
- path = gtk_tree_path_new_from_indices (2, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_list_store_remove (fixture->store, &iter) == TRUE);
- g_assert (!gtk_list_store_iter_is_valid (fixture->store, &fixture->iter[2]));
- g_assert (iters_equal (&iter, &fixture->iter[3]));
-
- check_model (fixture, new_order, 2);
-}
-
-static void
-list_store_test_remove_end (ListStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { 0, 1, 2, 3, -1 };
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* Remove node at 4 */
- path = gtk_tree_path_new_from_indices (4, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_list_store_remove (fixture->store, &iter) == FALSE);
- g_assert (!gtk_list_store_iter_is_valid (fixture->store, &fixture->iter[4]));
-
- check_model (fixture, new_order, 4);
-}
-
-static void
-list_store_test_clear (ListStore *fixture,
- gconstpointer user_data)
-{
- int i;
-
- gtk_list_store_clear (fixture->store);
-
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (fixture->store), NULL) == 0);
-
- for (i = 0; i < 5; i++)
- g_assert (!gtk_list_store_iter_is_valid (fixture->store, &fixture->iter[i]));
-}
-
-/* reorder */
-
-static void
-list_store_test_reorder (ListStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { 4, 1, 0, 2, 3 };
-
- gtk_list_store_reorder (fixture->store, new_order);
- check_model (fixture, new_order, -1);
-}
-
-/* swapping */
-
-static void
-list_store_test_swap_begin (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 0 and 1 at the beginning */
- int new_order[5] = { 1, 0, 2, 3, 4 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "0"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "1"));
-
- gtk_list_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_swap_middle_next (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 2 and 3 in the middle that are next to each other */
- int new_order[5] = { 0, 1, 3, 2, 4 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "3"));
-
- gtk_list_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_swap_middle_apart (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 1 and 3 in the middle that are apart from each other */
- int new_order[5] = { 0, 3, 2, 1, 4 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "1"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "3"));
-
- gtk_list_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_swap_end (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 3 and 4 at the end */
- int new_order[5] = { 0, 1, 2, 4, 3 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "3"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "4"));
-
- gtk_list_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_swap_single (void)
-{
- GtkTreeIter iter;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- /* Check if swap on a store with a single node does not corrupt
- * the store.
- */
-
- gtk_list_store_append (store, &iter);
- iter_copy = iter;
-
- gtk_list_store_swap (store, &iter, &iter);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- g_object_unref (store);
-}
-
-/* move after */
-
-static void
-list_store_test_move_after_from_start (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 0 after 2 */
- int new_order[5] = { 1, 2, 0, 3, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "0"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "2"));
-
- gtk_list_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_after_next (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2 after 3 */
- int new_order[5] = { 0, 1, 3, 2, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "3"));
-
- gtk_list_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_after_apart (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 1 after 3 */
- int new_order[5] = { 0, 2, 3, 1, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "1"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "3"));
-
- gtk_list_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_after_end (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2 after 4 */
- int new_order[5] = { 0, 1, 3, 4, 2 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "4"));
-
- gtk_list_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_after_from_end (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 4 after 1 */
- int new_order[5] = { 0, 1, 4, 2, 3 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "4"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "1"));
-
- gtk_list_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_after_change_ends (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move 0 after 4, this will cause both the head and tail ends to
- * change.
- */
- int new_order[5] = { 1, 2, 3, 4, 0 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "0"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "4"));
-
- gtk_list_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_after_NULL (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2, NULL should prepend */
- int new_order[5] = { 2, 0, 1, 3, 4 };
-
- GtkTreeIter iter;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
-
- gtk_list_store_move_after (fixture->store, &iter, NULL);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_after_single (void)
-{
- GtkTreeIter iter;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- /* Check if move-after on a store with a single node does not corrupt
- * the store.
- */
-
- gtk_list_store_append (store, &iter);
- iter_copy = iter;
-
- gtk_list_store_move_after (store, &iter, NULL);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- gtk_list_store_move_after (store, &iter, &iter);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- g_object_unref (store);
-}
-
-/* move before */
-
-static void
-list_store_test_move_before_next (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 3 before 2 */
- int new_order[5] = { 0, 1, 3, 2, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "3"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "2"));
-
- gtk_list_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_before_apart (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 1 before 3 */
- int new_order[5] = { 0, 2, 1, 3, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "1"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "3"));
-
- gtk_list_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_before_to_start (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2 before 0 */
- int new_order[5] = { 2, 0, 1, 3, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "0"));
-
- gtk_list_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_before_from_end (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 4 before 2 (replace end) */
- int new_order[5] = { 0, 1, 4, 2, 3 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "4"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "2"));
-
- gtk_list_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_before_change_ends (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 4 before 0 */
- int new_order[5] = { 4, 0, 1, 2, 3 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "4"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "0"));
-
- gtk_list_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_before_NULL (ListStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2, NULL should append */
- int new_order[5] = { 0, 1, 3, 4, 2 };
-
- GtkTreeIter iter;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
-
- gtk_list_store_move_before (fixture->store, &iter, NULL);
- check_model (fixture, new_order, -1);
-}
-
-static void
-list_store_test_move_before_single (void)
-{
- GtkTreeIter iter;
- GtkTreeIter iter_copy;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_INT);
-
- /* Check if move-before on a store with a single node does not corrupt
- * the store.
- */
-
- gtk_list_store_append (store, &iter);
- iter_copy = iter;
-
- gtk_list_store_move_before (store, &iter, NULL);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- gtk_list_store_move_before (store, &iter, &iter);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- g_object_unref (store);
-}
-
-
-/* iter invalidation */
-
-static void
-list_store_test_iter_previous_invalid (ListStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &iter);
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (fixture->store),
- &iter) == FALSE);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &iter) == FALSE);
- g_assert (iter.stamp == 0);
-}
-
-static void
-list_store_test_iter_next_invalid (ListStore *fixture,
- gconstpointer user_data)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
-
- path = gtk_tree_path_new_from_indices (4, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store),
- &iter) == FALSE);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &iter) == FALSE);
- g_assert (iter.stamp == 0);
-}
-
-static void
-list_store_test_iter_children_invalid (ListStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter, child;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &iter);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &iter) == TRUE);
-
- g_assert (gtk_tree_model_iter_children (GTK_TREE_MODEL (fixture->store),
- &child, &iter) == FALSE);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &child) == FALSE);
- g_assert (child.stamp == 0);
-}
-
-static void
-list_store_test_iter_nth_child_invalid (ListStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter, child;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &iter);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &iter) == TRUE);
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (fixture->store),
- &child, &iter, 0) == FALSE);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &child) == FALSE);
- g_assert (child.stamp == 0);
-}
-
-static void
-list_store_test_iter_parent_invalid (ListStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter, child;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &child);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &child) == TRUE);
-
- g_assert (gtk_tree_model_iter_parent (GTK_TREE_MODEL (fixture->store),
- &iter, &child) == FALSE);
- g_assert (gtk_list_store_iter_is_valid (fixture->store, &iter) == FALSE);
- g_assert (iter.stamp == 0);
-}
-
-
-/* main */
-
-void
-register_list_store_tests (void)
-{
- /* insertion */
- g_test_add_func ("/ListStore/insert-high-values",
- list_store_test_insert_high_values);
- g_test_add_func ("/ListStore/append",
- list_store_test_append);
- g_test_add_func ("/ListStore/prepend",
- list_store_test_prepend);
- g_test_add_func ("/ListStore/insert-after",
- list_store_test_insert_after);
- g_test_add_func ("/ListStore/insert-after-NULL",
- list_store_test_insert_after_NULL);
- g_test_add_func ("/ListStore/insert-before",
- list_store_test_insert_before);
- g_test_add_func ("/ListStore/insert-before-NULL",
- list_store_test_insert_before_NULL);
-
- /* setting values (FIXME) */
- g_test_add_func ("/ListStore/set-gvalue-to-transform",
- list_store_set_gvalue_to_transform);
-
- /* removal */
- g_test_add ("/ListStore/remove-begin", ListStore, NULL,
- list_store_setup, list_store_test_remove_begin,
- list_store_teardown);
- g_test_add ("/ListStore/remove-middle", ListStore, NULL,
- list_store_setup, list_store_test_remove_middle,
- list_store_teardown);
- g_test_add ("/ListStore/remove-end", ListStore, NULL,
- list_store_setup, list_store_test_remove_end,
- list_store_teardown);
-
- g_test_add ("/ListStore/clear", ListStore, NULL,
- list_store_setup, list_store_test_clear,
- list_store_teardown);
-
- /* reordering */
- g_test_add ("/ListStore/reorder", ListStore, NULL,
- list_store_setup, list_store_test_reorder,
- list_store_teardown);
-
- /* swapping */
- g_test_add ("/ListStore/swap-begin", ListStore, NULL,
- list_store_setup, list_store_test_swap_begin,
- list_store_teardown);
- g_test_add ("/ListStore/swap-middle-next", ListStore, NULL,
- list_store_setup, list_store_test_swap_middle_next,
- list_store_teardown);
- g_test_add ("/ListStore/swap-middle-apart", ListStore, NULL,
- list_store_setup, list_store_test_swap_middle_apart,
- list_store_teardown);
- g_test_add ("/ListStore/swap-end", ListStore, NULL,
- list_store_setup, list_store_test_swap_end,
- list_store_teardown);
- g_test_add_func ("/ListStore/swap-single",
- list_store_test_swap_single);
-
- /* moving */
- g_test_add ("/ListStore/move-after-from-start", ListStore, NULL,
- list_store_setup, list_store_test_move_after_from_start,
- list_store_teardown);
- g_test_add ("/ListStore/move-after-next", ListStore, NULL,
- list_store_setup, list_store_test_move_after_next,
- list_store_teardown);
- g_test_add ("/ListStore/move-after-apart", ListStore, NULL,
- list_store_setup, list_store_test_move_after_apart,
- list_store_teardown);
- g_test_add ("/ListStore/move-after-end", ListStore, NULL,
- list_store_setup, list_store_test_move_after_end,
- list_store_teardown);
- g_test_add ("/ListStore/move-after-from-end", ListStore, NULL,
- list_store_setup, list_store_test_move_after_from_end,
- list_store_teardown);
- g_test_add ("/ListStore/move-after-change-ends", ListStore, NULL,
- list_store_setup, list_store_test_move_after_change_ends,
- list_store_teardown);
- g_test_add ("/ListStore/move-after-NULL", ListStore, NULL,
- list_store_setup, list_store_test_move_after_NULL,
- list_store_teardown);
- g_test_add_func ("/ListStore/move-after-single",
- list_store_test_move_after_single);
-
- g_test_add ("/ListStore/move-before-next", ListStore, NULL,
- list_store_setup, list_store_test_move_before_next,
- list_store_teardown);
- g_test_add ("/ListStore/move-before-apart", ListStore, NULL,
- list_store_setup, list_store_test_move_before_apart,
- list_store_teardown);
- g_test_add ("/ListStore/move-before-to-start", ListStore, NULL,
- list_store_setup, list_store_test_move_before_to_start,
- list_store_teardown);
- g_test_add ("/ListStore/move-before-from-end", ListStore, NULL,
- list_store_setup, list_store_test_move_before_from_end,
- list_store_teardown);
- g_test_add ("/ListStore/move-before-change-ends", ListStore, NULL,
- list_store_setup, list_store_test_move_before_change_ends,
- list_store_teardown);
- g_test_add ("/ListStore/move-before-NULL", ListStore, NULL,
- list_store_setup, list_store_test_move_before_NULL,
- list_store_teardown);
- g_test_add_func ("/ListStore/move-before-single",
- list_store_test_move_before_single);
-
- /* iter invalidation */
- g_test_add ("/ListStore/iter-prev-invalid", ListStore, NULL,
- list_store_setup, list_store_test_iter_previous_invalid,
- list_store_teardown);
- g_test_add ("/ListStore/iter-next-invalid", ListStore, NULL,
- list_store_setup, list_store_test_iter_next_invalid,
- list_store_teardown);
- g_test_add ("/ListStore/iter-children-invalid", ListStore, NULL,
- list_store_setup, list_store_test_iter_children_invalid,
- list_store_teardown);
- g_test_add ("/ListStore/iter-nth-child-invalid", ListStore, NULL,
- list_store_setup, list_store_test_iter_nth_child_invalid,
- list_store_teardown);
- g_test_add ("/ListStore/iter-parent-invalid", ListStore, NULL,
- list_store_setup, list_store_test_iter_parent_invalid,
- list_store_teardown);
-}
diff --git a/gtk/tests/modelrefcount.c b/gtk/tests/modelrefcount.c
deleted file mode 100644
index 2d39d9c227..0000000000
--- a/gtk/tests/modelrefcount.c
+++ /dev/null
@@ -1,976 +0,0 @@
-/* GtkTreeModel ref counting tests
- * Copyright (C) 2011 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "gtktreemodelrefcount.h"
-#include "treemodel.h"
-
-/* And the tests themselves */
-
-static void
-test_list_no_reference (void)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
-
- assert_root_level_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_list_reference_during_creation (void)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
- tree_view = gtk_tree_view_new_with_model (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_root_level_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_list_reference_after_creation (void)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- assert_root_level_unreferenced (ref_model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
-
- tree_view = gtk_tree_view_new_with_model (model);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_root_level_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_list_reference_reordered (void)
-{
- GtkTreeIter iter1, iter2, iter3, iter4, iter5;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- assert_root_level_unreferenced (ref_model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter3, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter4, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter5, NULL);
-
- tree_view = gtk_tree_view_new_with_model (model);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &iter1, &iter5);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &iter3, &iter4);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_root_level_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-
-static void
-test_tree_no_reference (void)
-{
- GtkTreeIter iter, child;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_tree_reference_during_creation (void)
-{
- GtkTreeIter iter, child;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
- tree_view = gtk_tree_view_new_with_model (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
-
- assert_root_level_referenced (ref_model, 1);
- assert_not_entire_model_referenced (ref_model, 1);
- assert_level_unreferenced (ref_model, &child);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_tree_reference_after_creation (void)
-{
- GtkTreeIter iter, child;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
-
- assert_entire_model_unreferenced (ref_model);
-
- tree_view = gtk_tree_view_new_with_model (model);
-
- assert_root_level_referenced (ref_model, 1);
- assert_not_entire_model_referenced (ref_model, 1);
- assert_level_unreferenced (ref_model, &child);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_tree_reference_reordered (void)
-{
- GtkTreeIter parent;
- GtkTreeIter iter1, iter2, iter3, iter4, iter5;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- assert_root_level_unreferenced (ref_model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, &parent);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, &parent);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter3, &parent);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter4, &parent);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter5, &parent);
-
- tree_view = gtk_tree_view_new_with_model (model);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &iter1, &iter5);
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_tree_store_move_after (GTK_TREE_STORE (model),
- &iter3, &iter4);
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_tree_reference_expand_all (void)
-{
- GtkTreeIter iter, child;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
-
- assert_entire_model_unreferenced (ref_model);
-
- tree_view = gtk_tree_view_new_with_model (model);
-
- assert_root_level_referenced (ref_model, 1);
- assert_not_entire_model_referenced (ref_model, 1);
- assert_level_unreferenced (ref_model, &child);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
-
- assert_root_level_referenced (ref_model, 1);
- assert_not_entire_model_referenced (ref_model, 1);
- assert_level_unreferenced (ref_model, &child);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_tree_reference_collapse_all (void)
-{
- GtkTreeIter iter, child;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &iter);
-
- assert_entire_model_unreferenced (ref_model);
-
- tree_view = gtk_tree_view_new_with_model (model);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
-
- assert_root_level_referenced (ref_model, 1);
- assert_not_entire_model_referenced (ref_model, 1);
- assert_level_unreferenced (ref_model, &child);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_tree_reference_expand_collapse (void)
-{
- GtkTreeIter parent1, parent2, child;
- GtkTreePath *path1, *path2;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
- tree_view = gtk_tree_view_new_with_model (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child, &parent2);
-
- path1 = gtk_tree_model_get_path (model, &parent1);
- path2 = gtk_tree_model_get_path (model, &parent2);
-
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path1, FALSE);
-
- assert_level_referenced (ref_model, 1, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path1);
-
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path2, FALSE);
-
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_referenced (ref_model, 1, &parent2);
-
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path2);
-
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path2, FALSE);
-
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_referenced (ref_model, 1, &parent2);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path1, FALSE);
-
- assert_level_referenced (ref_model, 1, &parent1);
- assert_level_referenced (ref_model, 1, &parent2);
-
- gtk_tree_path_free (path1);
- gtk_tree_path_free (path2);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (ref_model);
-}
-
-static void
-test_row_reference_list (void)
-{
- GtkTreeIter iter0, iter1, iter2;
- GtkTreePath *path;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeRowReference *row_ref;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter0, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, NULL);
-
- assert_root_level_unreferenced (ref_model);
-
- /* create and remove a row ref and check reference counts */
- path = gtk_tree_path_new_from_indices (1, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &iter2, 0);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_root_level_unreferenced (ref_model);
-
- /* the same, but then also with a tree view monitoring the model */
- tree_view = gtk_tree_view_new_with_model (model);
-
- assert_root_level_referenced (ref_model, 1);
-
- row_ref = gtk_tree_row_reference_new (model, path);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &iter1, 2);
- assert_node_ref_count (ref_model, &iter2, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &iter2, 0);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_root_level_unreferenced (ref_model);
-
- gtk_tree_path_free (path);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_row_reference_list_remove (void)
-{
- GtkTreeIter iter0, iter1, iter2;
- GtkTreePath *path;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeRowReference *row_ref;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter0, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, NULL);
-
- assert_root_level_unreferenced (ref_model);
-
- /* test creating the row reference and then removing the node */
- path = gtk_tree_path_new_from_indices (1, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &iter2, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter1);
-
- assert_root_level_unreferenced (ref_model);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_root_level_unreferenced (ref_model);
-
- /* test creating a row ref, removing another node and then removing
- * the row ref node.
- */
- row_ref = gtk_tree_row_reference_new (model, path);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &iter2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter0);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter2);
-
- g_assert (!gtk_tree_model_get_iter_first (model, &iter0));
-
- gtk_tree_row_reference_free (row_ref);
-
- gtk_tree_path_free (path);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_row_reference_tree (void)
-{
- GtkTreeIter iter0, iter1, iter2;
- GtkTreeIter child0, child1, child2;
- GtkTreeIter grandchild0, grandchild1, grandchild2;
- GtkTreePath *path;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeRowReference *row_ref, *row_ref1;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter0, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child0, &iter0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild0, &child0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child1, &iter1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild1, &child1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child2, &iter2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild2, &child2);
-
- assert_entire_model_unreferenced (ref_model);
-
- /* create and remove a row ref and check reference counts */
- path = gtk_tree_path_new_from_indices (1, 0, 0, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &grandchild1, 1);
- assert_node_ref_count (ref_model, &iter2, 0);
- assert_node_ref_count (ref_model, &child2, 0);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_entire_model_unreferenced (ref_model);
-
- /* again, with path 1:1 */
- path = gtk_tree_path_new_from_indices (1, 0, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &grandchild1, 0);
- assert_node_ref_count (ref_model, &iter2, 0);
- assert_node_ref_count (ref_model, &child2, 0);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_entire_model_unreferenced (ref_model);
-
- /* both row refs existent at once and also with a tree view monitoring
- * the model
- */
- tree_view = gtk_tree_view_new_with_model (model);
-
- assert_root_level_referenced (ref_model, 1);
-
- path = gtk_tree_path_new_from_indices (1, 0, 0, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 2);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &grandchild1, 1);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &child2, 0);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- path = gtk_tree_path_new_from_indices (1, 0, -1);
- row_ref1 = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 3);
- assert_node_ref_count (ref_model, &child1, 2);
- assert_node_ref_count (ref_model, &grandchild1, 1);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &child2, 0);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 2);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &grandchild1, 0);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &child2, 0);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_widget_destroy (tree_view);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &grandchild1, 0);
- assert_node_ref_count (ref_model, &iter2, 0);
- assert_node_ref_count (ref_model, &child2, 0);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_row_reference_free (row_ref1);
-
- assert_root_level_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_row_reference_tree_remove (void)
-{
- GtkTreeIter iter0, iter1, iter2;
- GtkTreeIter child0, child1, child2;
- GtkTreeIter grandchild0, grandchild1, grandchild2;
- GtkTreePath *path;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeRowReference *row_ref, *row_ref1, *row_ref2;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter0, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child0, &iter0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild0, &child0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child1, &iter1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild1, &child1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child2, &iter2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild2, &child2);
-
- assert_entire_model_unreferenced (ref_model);
-
- path = gtk_tree_path_new_from_indices (1, 0, 0, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (2, 0, -1);
- row_ref1 = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (2, -1);
- row_ref2 = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &grandchild1, 1);
- assert_node_ref_count (ref_model, &iter2, 2);
- assert_node_ref_count (ref_model, &child2, 1);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandchild1);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 0);
- assert_node_ref_count (ref_model, &child1, 0);
- assert_node_ref_count (ref_model, &iter2, 2);
- assert_node_ref_count (ref_model, &child2, 1);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &child2);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 0);
- assert_node_ref_count (ref_model, &child1, 0);
- assert_node_ref_count (ref_model, &iter2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter2);
-
- assert_entire_model_unreferenced (ref_model);
-
- gtk_tree_row_reference_free (row_ref);
- gtk_tree_row_reference_free (row_ref1);
- gtk_tree_row_reference_free (row_ref2);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_row_reference_tree_remove_ancestor (void)
-{
- GtkTreeIter iter0, iter1, iter2;
- GtkTreeIter child0, child1, child2;
- GtkTreeIter grandchild0, grandchild1, grandchild2;
- GtkTreePath *path;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeRowReference *row_ref, *row_ref1;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter0, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child0, &iter0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild0, &child0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child1, &iter1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild1, &child1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child2, &iter2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild2, &child2);
-
- assert_entire_model_unreferenced (ref_model);
-
- path = gtk_tree_path_new_from_indices (1, 0, 0, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (2, 0, -1);
- row_ref1 = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &grandchild1, 1);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &child2, 1);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &child1);
-
- assert_node_ref_count (ref_model, &iter0, 0);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 0);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &child2, 1);
- assert_node_ref_count (ref_model, &grandchild2, 0);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter2);
-
- assert_entire_model_unreferenced (ref_model);
-
- gtk_tree_row_reference_free (row_ref);
- gtk_tree_row_reference_free (row_ref1);
-
- g_object_unref (ref_model);
-}
-
-static void
-test_row_reference_tree_expand (void)
-{
- GtkTreeIter iter0, iter1, iter2;
- GtkTreeIter child0, child1, child2;
- GtkTreeIter grandchild0, grandchild1, grandchild2;
- GtkTreePath *path;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeRowReference *row_ref, *row_ref1, *row_ref2;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
- tree_view = gtk_tree_view_new_with_model (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter0, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child0, &iter0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild0, &child0);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child1, &iter1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild1, &child1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &child2, &iter2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandchild2, &child2);
-
- assert_root_level_referenced (ref_model, 1);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_entire_model_referenced (ref_model, 1);
-
- path = gtk_tree_path_new_from_indices (1, 0, 0, -1);
- row_ref = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (2, 0, -1);
- row_ref1 = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- path = gtk_tree_path_new_from_indices (2, -1);
- row_ref2 = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 1);
- assert_node_ref_count (ref_model, &grandchild0, 1);
- assert_node_ref_count (ref_model, &iter1, 2);
- assert_node_ref_count (ref_model, &child1, 2);
- assert_node_ref_count (ref_model, &grandchild1, 2);
- assert_node_ref_count (ref_model, &iter2, 3);
- assert_node_ref_count (ref_model, &child2, 2);
- assert_node_ref_count (ref_model, &grandchild2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandchild1);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 1);
- assert_node_ref_count (ref_model, &grandchild0, 1);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &iter2, 3);
- assert_node_ref_count (ref_model, &child2, 2);
- assert_node_ref_count (ref_model, &grandchild2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &child2);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 1);
- assert_node_ref_count (ref_model, &grandchild0, 1);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 1);
- assert_node_ref_count (ref_model, &iter2, 2);
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 0);
- assert_node_ref_count (ref_model, &iter2, 2);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter2);
-
- assert_node_ref_count (ref_model, &iter0, 1);
- assert_node_ref_count (ref_model, &child0, 0);
- assert_node_ref_count (ref_model, &grandchild0, 0);
- assert_node_ref_count (ref_model, &iter1, 1);
- assert_node_ref_count (ref_model, &child1, 0);
-
- gtk_tree_row_reference_free (row_ref);
- gtk_tree_row_reference_free (row_ref1);
- gtk_tree_row_reference_free (row_ref2);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (ref_model);
-}
-
-void
-register_model_ref_count_tests (void)
-{
- /* lists (though based on GtkTreeStore) */
- g_test_add_func ("/TreeModel/ref-count/list/no-reference",
- test_list_no_reference);
- g_test_add_func ("/TreeModel/ref-count/list/reference-during-creation",
- test_list_reference_during_creation);
- g_test_add_func ("/TreeModel/ref-count/list/reference-after-creation",
- test_list_reference_after_creation);
- g_test_add_func ("/TreeModel/ref-count/list/reference-reordered",
- test_list_reference_reordered);
-
- /* trees */
- g_test_add_func ("/TreeModel/ref-count/tree/no-reference",
- test_tree_no_reference);
- g_test_add_func ("/TreeModel/ref-count/tree/reference-during-creation",
- test_tree_reference_during_creation);
- g_test_add_func ("/TreeModel/ref-count/tree/reference-after-creation",
- test_tree_reference_after_creation);
- g_test_add_func ("/TreeModel/ref-count/tree/expand-all",
- test_tree_reference_expand_all);
- g_test_add_func ("/TreeModel/ref-count/tree/collapse-all",
- test_tree_reference_collapse_all);
- g_test_add_func ("/TreeModel/ref-count/tree/expand-collapse",
- test_tree_reference_expand_collapse);
- g_test_add_func ("/TreeModel/ref-count/tree/reference-reordered",
- test_tree_reference_reordered);
-
- /* row references */
- g_test_add_func ("/TreeModel/ref-count/row-reference/list",
- test_row_reference_list);
- g_test_add_func ("/TreeModel/ref-count/row-reference/list-remove",
- test_row_reference_list_remove);
- g_test_add_func ("/TreeModel/ref-count/row-reference/tree",
- test_row_reference_tree);
- g_test_add_func ("/TreeModel/ref-count/row-reference/tree-remove",
- test_row_reference_tree_remove);
- g_test_add_func ("/TreeModel/ref-count/row-reference/tree-remove-ancestor",
- test_row_reference_tree_remove_ancestor);
- g_test_add_func ("/TreeModel/ref-count/row-reference/tree-expand",
- test_row_reference_tree_expand);
-}
diff --git a/gtk/tests/object.c b/gtk/tests/object.c
deleted file mode 100644
index 1e06dede8f..0000000000
--- a/gtk/tests/object.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/* Gtk+ object tests
- * Copyright (C) 2007 Imendio AB
- * Authors: Tim Janik
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <gtk/gtk.h>
-#include <string.h>
-
-/* --- helper macros for property value generation --- */
-/* dvalue=+0: generate minimum value
- * dvalue=.x: generate value within value range proportional to x.
- * dvalue=+1: generate maximum value
- * dvalue=-1: generate random value within value range
- * dvalue=+2: initialize value from default_value
- */
-#define ASSIGN_VALUE(__g_value_set_func, __value, PSPECTYPE, __pspec, __default_value, __minimum, __maximum, __dvalue) do { \
- PSPECTYPE __p = (PSPECTYPE) __pspec; \
- __g_value_set_func (__value, SELECT_VALUE (__dvalue, __p->__default_value, __p->__minimum, __p->__maximum)); \
-} while (0)
-#define SELECT_VALUE(__dvalue, __default_value, __minimum, __maximum) ( \
- __dvalue >= 0 && __dvalue <= 1 ? __minimum * (1 - __dvalue) + __dvalue * __maximum : \
- __dvalue <= -1 ? g_test_rand_double_range (__minimum, __maximum) : \
- __default_value)
-#define SELECT_NAME(__dvalue) ( \
- __dvalue == 0 ? "minimum" : \
- __dvalue == 1 ? "maximum" : \
- __dvalue >= +2 ? "default" : \
- __dvalue == 0.5 ? "medium" : \
- __dvalue > 0 && __dvalue < 1 ? "fractional" : \
- "random")
-#define MATCH_ANY_VALUE ((void*) 0xf1874c23)
-
-/* --- property blacklists --- */
-typedef struct {
- const char *type_name;
- const char *name;
- gconstpointer value;
-} IgnoreProperty;
-static const IgnoreProperty*
-list_ignore_properties (gboolean buglist)
-{
- /* currently untestable properties */
- static const IgnoreProperty ignore_properties[] = {
- { "GtkContainer", "child", NULL, }, /* needs working child widget */
- { "GtkRadioMenuItem", "group", NULL, }, /* needs working sibling */
- { "GtkWidget", "parent", NULL, }, /* needs working parent widget */
- { "GtkCList", "selection-mode", (void*) GTK_SELECTION_NONE, },
- { "GtkWidget", "has-default", (void*) TRUE, }, /* conflicts with toplevel-less widgets */
- { "GtkWidget", "screen", NULL, },
- { "GtkWindow", "type-hint", (void*) GDK_WINDOW_TYPE_HINT_DND, }, /* conflicts with ::visible=TRUE */
- { "GtkCellView", "background", (void*) "", }, /* "" is not a valid background color */
- { "GtkColorButton", "color", (void*) NULL, }, /* not a valid boxed color */
- { "GtkInputDialog", "has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */
- { "GtkMessageDialog", "has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */
- { "GtkFontSelectionDialog", "has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */
- { "GtkColorSelectionDialog","has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */
- { "GtkColorSelection", "child", NULL, },
- { "GtkColorSelection", "current-color", (void*) NULL, }, /* not a valid boxed color */
- { "GtkComboBox", "row-span-column", (void*) MATCH_ANY_VALUE }, /* GtkComboBoxEntry needs a tree model for this */
- { "GtkComboBox", "column-span-column", (void*) MATCH_ANY_VALUE }, /* GtkComboBoxEntry needs a tree model for this */
- { "GtkFileChooserButton", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */
- { "GtkFileChooserButton", "action", (void*) GTK_FILE_CHOOSER_ACTION_SAVE },
- { "GtkFileChooserButton", "action", (void*) GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER },
- { "GtkFileChooserWidget", "select-multiple", (void*) 0x1 }, /* property conflicts */
- { "GtkFileChooserDialog", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */
- { "GtkMenu", "accel-path", (void*) MATCH_ANY_VALUE }, /* has odd restrictions in the setter */
- { "GtkMenuItem", "accel-path", (void*) MATCH_ANY_VALUE }, /* has odd restrictions in the setter */
- { "GtkRecentChooserMenu", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */
- { "GtkTextView", "overwrite", (void*) MATCH_ANY_VALUE }, /* needs text buffer */
- { "GtkToolbar", "icon-size", (void*) GTK_ICON_SIZE_INVALID },
- { NULL, NULL, NULL }
- };
- /* properties suspected to be Gdk/Gtk+ bugs */
- static const IgnoreProperty bug_properties[] = {
- { "GtkComboBox", "active", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL model bug */
- { "GtkCTree", "spacing", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers signedness bug */
- { "GtkFileChooserButton", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */
- { "GtkFileChooserDialog", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */
- { "GtkFileChooserWidget", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */
- { "GtkMenu", "tearoff-state", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL widget cast */
- { "GtkText", "text-position", (void*) MATCH_ANY_VALUE }, /* FIXME: segfaults, fix property minimum/maximum */
- { NULL, NULL, NULL }
- };
- if (buglist)
- return bug_properties;
- else
- return ignore_properties;
-}
-
-/* --- test functions --- */
-static void
-pspec_select_value (GParamSpec *pspec,
- GValue *value,
- double dvalue)
-{
- /* generate a value suitable for pspec */
- if (G_IS_PARAM_SPEC_CHAR (pspec))
- ASSIGN_VALUE (g_value_set_char, value, GParamSpecChar*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_UCHAR (pspec))
- ASSIGN_VALUE (g_value_set_uchar, value, GParamSpecUChar*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_INT (pspec))
- ASSIGN_VALUE (g_value_set_int, value, GParamSpecInt*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_UINT (pspec))
- ASSIGN_VALUE (g_value_set_uint, value, GParamSpecUInt*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_LONG (pspec))
- ASSIGN_VALUE (g_value_set_long, value, GParamSpecLong*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_ULONG (pspec))
- ASSIGN_VALUE (g_value_set_ulong, value, GParamSpecULong*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_INT64 (pspec))
- ASSIGN_VALUE (g_value_set_int64, value, GParamSpecInt64*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_UINT64 (pspec))
- ASSIGN_VALUE (g_value_set_uint64, value, GParamSpecUInt64*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_FLOAT (pspec))
- ASSIGN_VALUE (g_value_set_float, value, GParamSpecFloat*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_DOUBLE (pspec))
- ASSIGN_VALUE (g_value_set_double, value, GParamSpecDouble*, pspec, default_value, minimum, maximum, dvalue);
- else if (G_IS_PARAM_SPEC_BOOLEAN (pspec))
- g_value_set_boolean (value, SELECT_VALUE (dvalue, ((GParamSpecBoolean*) pspec)->default_value, FALSE, TRUE));
- else if (G_IS_PARAM_SPEC_UNICHAR (pspec))
- g_value_set_uint (value, SELECT_VALUE (dvalue, ((GParamSpecUnichar*) pspec)->default_value, FALSE, TRUE));
- else if (G_IS_PARAM_SPEC_GTYPE (pspec))
- g_value_set_gtype (value, SELECT_VALUE ((int) dvalue, ((GParamSpecGType*) pspec)->is_a_type, 0, GTK_TYPE_WIDGET));
- else if (G_IS_PARAM_SPEC_STRING (pspec))
- {
- GParamSpecString *sspec = (GParamSpecString*) pspec;
- if (dvalue >= +2)
- g_value_set_string (value, sspec->default_value);
- if (dvalue > 0 && sspec->cset_first && sspec->cset_nth)
- g_value_take_string (value, g_strdup_printf ("%c%c", sspec->cset_first[0], sspec->cset_nth[0]));
- else /* if (sspec->ensure_non_null) */
- g_value_set_string (value, "");
- }
- else if (G_IS_PARAM_SPEC_ENUM (pspec))
- {
- GParamSpecEnum *espec = (GParamSpecEnum*) pspec;
- if (dvalue >= +2)
- g_value_set_enum (value, espec->default_value);
- if (dvalue >= 0 && dvalue <= 1)
- g_value_set_enum (value, espec->enum_class->values[(int) ((espec->enum_class->n_values - 1) * dvalue)].value);
- else if (dvalue <= -1)
- g_value_set_enum (value, espec->enum_class->values[g_test_rand_int_range (0, espec->enum_class->n_values)].value);
- }
- else if (G_IS_PARAM_SPEC_FLAGS (pspec))
- {
- GParamSpecFlags *fspec = (GParamSpecFlags*) pspec;
- if (dvalue >= +2)
- g_value_set_flags (value, fspec->default_value);
- if (dvalue >= 0 && dvalue <= 1)
- g_value_set_flags (value, fspec->flags_class->values[(int) ((fspec->flags_class->n_values - 1) * dvalue)].value);
- else if (dvalue <= -1)
- g_value_set_flags (value, fspec->flags_class->values[g_test_rand_int_range (0, fspec->flags_class->n_values)].value);
- }
- /* unimplemented:
- * G_IS_PARAM_SPEC_PARAM
- * G_IS_PARAM_SPEC_BOXED
- * G_IS_PARAM_SPEC_POINTER
- * G_IS_PARAM_SPEC_VALUE_ARRAY
- * G_IS_PARAM_SPEC_OBJECT
- */
-}
-
-static gpointer
-value_as_pointer (GValue *value)
-{
- if (g_value_fits_pointer (value))
- return g_value_peek_pointer (value);
- if (G_VALUE_HOLDS_BOOLEAN (value))
- return GINT_TO_POINTER(g_value_get_boolean (value));
- if (G_VALUE_HOLDS_CHAR (value))
- return (void*) (gssize) g_value_get_char (value);
- if (G_VALUE_HOLDS_UCHAR (value))
- return (void*) (gsize) g_value_get_uchar (value);
- if (G_VALUE_HOLDS_INT (value))
- return GINT_TO_POINTER(g_value_get_int (value));
- if (G_VALUE_HOLDS_UINT (value))
- return GUINT_TO_POINTER(g_value_get_uint (value));
- if (G_VALUE_HOLDS_LONG (value))
- return (void*) g_value_get_long (value);
- if (G_VALUE_HOLDS_ULONG (value))
- return (void*) g_value_get_ulong (value);
- if (G_VALUE_HOLDS_FLOAT (value))
- return (void*) (gssize) g_value_get_float (value);
- if (G_VALUE_HOLDS_DOUBLE (value))
- return (void*) (gssize) g_value_get_double (value);
- if (G_VALUE_HOLDS_ENUM (value))
- return (void*) (gssize) g_value_get_enum (value);
- if (G_VALUE_HOLDS_FLAGS (value))
- return (void*) (gsize) g_value_get_flags (value);
- return (void*) 0x1373babe;
-}
-
-static void
-object_test_property (GObject *object,
- GParamSpec *pspec,
- double dvalue)
-{
- /* test setting of a normal writable property */
- if (pspec->flags & G_PARAM_WRITABLE &&
- !(pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY)))
- {
- GValue value = G_VALUE_INIT;
- guint i;
- const IgnoreProperty *ignore_properties;
- /* select value to set */
- g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
- pspec_select_value (pspec, &value, dvalue);
- /* ignore untestable properties */
- ignore_properties = list_ignore_properties (FALSE);
- for (i = 0; ignore_properties[i].name; i++)
- if (g_strcmp0 ("", ignore_properties[i].name) ||
- (g_type_is_a (G_OBJECT_TYPE (object), g_type_from_name (ignore_properties[i].type_name)) &&
- strcmp (pspec->name, ignore_properties[i].name) == 0 &&
- (MATCH_ANY_VALUE == ignore_properties[i].value ||
- value_as_pointer (&value) == ignore_properties[i].value ||
- (G_VALUE_HOLDS_STRING (&value) &&
- strcmp (g_value_get_string (&value), ignore_properties[i].value) == 0))))
- break;
- /* ignore known property bugs if not testing thoroughly */
- if (ignore_properties[i].name == NULL && !g_test_thorough ())
- {
- ignore_properties = list_ignore_properties (TRUE);
- for (i = 0; ignore_properties[i].name; i++)
- if (g_type_is_a (G_OBJECT_TYPE (object), g_type_from_name (ignore_properties[i].type_name)) &&
- strcmp (pspec->name, ignore_properties[i].name) == 0 &&
- (MATCH_ANY_VALUE == ignore_properties[i].value ||
- value_as_pointer (&value) == ignore_properties[i].value ||
- (G_VALUE_HOLDS_STRING (&value) &&
- strcmp (g_value_get_string (&value), ignore_properties[i].value) == 0)))
- break;
- }
- /* assign unignored properties */
- if (ignore_properties[i].name == NULL)
- {
- if (g_test_verbose ())
- g_print ("PropertyTest: %s::%s := (%s value (%s): %p)\n",
- g_type_name (G_OBJECT_TYPE (object)), pspec->name,
- SELECT_NAME (dvalue), g_type_name (G_VALUE_TYPE (&value)),
- value_as_pointer (&value));
- g_object_set_property (object, pspec->name, &value);
- }
- /* cleanups */
- g_value_unset (&value);
- }
-}
-
-static void
-widget_test_properties (GtkWidget *widget,
- double dvalue)
-{
- /* try setting all possible properties, according to dvalue */
- guint i, n_pspecs = 0;
- GParamSpec **pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (widget), &n_pspecs);
- for (i = 0; i < n_pspecs; i++)
- {
- GParamSpec *pspec = pspecs[i];
- if (pspec->flags & G_PARAM_WRITABLE &&
- !(pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY)))
- object_test_property (G_OBJECT (widget), pspecs[i], dvalue);
- }
- g_free (pspecs);
-}
-
-static void
-widget_fixups (GtkWidget *widget)
-{
- /* post-constructor for widgets that need additional settings to work correctly */
- if (GTK_IS_COMBO_BOX (widget))
- {
- GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING);
- g_object_set (widget, "model", store, NULL);
- g_object_unref (store);
- gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "test text");
- }
-}
-
-static void
-widget_property_tests (gconstpointer test_data)
-{
- GType wtype = (GType) test_data;
- /* create widget */
- GtkWidget *widget = gtk_widget_new (wtype, NULL);
- g_object_ref_sink (widget);
- widget_fixups (widget);
- /* test property values */
- widget_test_properties (widget, +2); /* test default_value */
- widget_test_properties (widget, 0); /* test minimum */
- widget_test_properties (widget, 0.5); /* test medium */
- widget_test_properties (widget, 1); /* test maximum */
- widget_test_properties (widget, -1); /* test random value */
- /* cleanup */
- gtk_widget_destroy (widget);
- g_object_unref (widget);
-}
-
-/* --- main test program --- */
-int
-main (int argc,
- char *argv[])
-{
- const GType *otypes;
- guint i;
- /* initialize test program */
- gtk_test_init (&argc, &argv);
- gtk_test_register_all_types ();
- /* install a property test for each widget type */
- otypes = gtk_test_list_all_types (NULL);
- for (i = 0; otypes[i]; i++)
- if (g_type_is_a (otypes[i], GTK_TYPE_WIDGET) &&
- G_TYPE_IS_OBJECT (otypes[i]) &&
- !G_TYPE_IS_ABSTRACT (otypes[i]))
- {
- gchar *testpath = g_strdup_printf ("/properties/%s", g_type_name (otypes[i]));
- g_test_add_data_func (testpath, (void*) otypes[i], widget_property_tests);
- g_free (testpath);
- }
- return g_test_run ();
-}
diff --git a/gtk/tests/objects-finalize.c b/gtk/tests/objects-finalize.c
deleted file mode 100644
index 0e1eae000c..0000000000
--- a/gtk/tests/objects-finalize.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* objects-finalize.c
- * Copyright (C) 2013 Openismus GmbH
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors: Tristan Van Berkom <tristanvb@openismus.com>
- */
-#include <gtk/gtk.h>
-#include <string.h>
-
-#ifdef GDK_WINDOWING_X11
-# include <gdk/gdkx.h>
-#endif
-
-
-typedef GType (*GTypeGetFunc) (void);
-
-static gboolean finalized = FALSE;
-
-static gboolean
-main_loop_quit_cb (gpointer data)
-{
- gtk_main_quit ();
-
- g_assert (finalized);
- return FALSE;
-}
-
-static void
-check_finalized (gpointer data,
- GObject *where_the_object_was)
-{
- gboolean *did_finalize = (gboolean *)data;
-
- *did_finalize = TRUE;
-}
-
-static void
-test_finalize_object (gconstpointer data)
-{
- GType test_type = GPOINTER_TO_SIZE (data);
- GObject *object;
-
- object = g_object_new (test_type, NULL);
- g_assert (G_IS_OBJECT (object));
-
- /* Make sure we have the only reference */
- if (g_object_is_floating (object))
- g_object_ref_sink (object);
-
- /* Assert that the object finalizes properly */
- g_object_weak_ref (object, check_finalized, &finalized);
-
- /* Toplevels are owned by GTK+, just tell GTK+ to destroy it */
- if (GTK_IS_WINDOW (object) || GTK_IS_INVISIBLE (object))
- gtk_widget_destroy (GTK_WIDGET (object));
- else
- g_object_unref (object);
-
- /* Even if the object did finalize, it may have left some dangerous stuff in the GMainContext */
- g_timeout_add (50, main_loop_quit_cb, NULL);
- gtk_main();
-}
-
-int
-main (int argc, char **argv)
-{
- const GType *all_types;
- guint n_types = 0, i;
-
- /* initialize test program */
- gtk_test_init (&argc, &argv);
- gtk_test_register_all_types ();
-
- all_types = gtk_test_list_all_types (&n_types);
-
- for (i = 0; i < n_types; i++)
- {
- if (g_type_is_a (all_types[i], G_TYPE_OBJECT) &&
- G_TYPE_IS_INSTANTIATABLE (all_types[i]) &&
- !G_TYPE_IS_ABSTRACT (all_types[i]) &&
-#ifdef GDK_WINDOWING_X11
- all_types[i] != GDK_TYPE_X11_WINDOW &&
- all_types[i] != GDK_TYPE_X11_CURSOR &&
- all_types[i] != GDK_TYPE_X11_SCREEN &&
- all_types[i] != GDK_TYPE_X11_DISPLAY &&
- all_types[i] != GDK_TYPE_X11_DEVICE_MANAGER_XI2 &&
- all_types[i] != GDK_TYPE_X11_DISPLAY_MANAGER &&
-#endif
- /* Not allowed to finalize a GdkPixbufLoader without calling gdk_pixbuf_loader_close() */
- all_types[i] != GDK_TYPE_PIXBUF_LOADER &&
- all_types[i] != gdk_pixbuf_simple_anim_iter_get_type())
- {
- gchar *test_path = g_strdup_printf ("/FinalizeObject/%s", g_type_name (all_types[i]));
-
- g_test_add_data_func (test_path, GSIZE_TO_POINTER (all_types[i]), test_finalize_object);
-
- g_free (test_path);
- }
- }
-
- return g_test_run();
-}
diff --git a/gtk/tests/papersize.c b/gtk/tests/papersize.c
deleted file mode 100644
index 6af7acc643..0000000000
--- a/gtk/tests/papersize.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 2011 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-static void
-test_parse (void)
-{
- GtkPaperSize *p;
-
- p = gtk_paper_size_new (GTK_PAPER_NAME_A4);
- g_assert (p != NULL);
- g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 210);
- g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 297);
- g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "iso_a4");
- g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "A4");
- g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "A4");
- g_assert (!gtk_paper_size_is_custom (p));
- gtk_paper_size_free (p);
-
- p = gtk_paper_size_new (GTK_PAPER_NAME_B5);
- g_assert (p != NULL);
- g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 176);
- g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 250);
- g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "iso_b5");
- g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "B5");
- g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "ISOB5");
- g_assert (!gtk_paper_size_is_custom (p));
- gtk_paper_size_free (p);
-
- p = gtk_paper_size_new (GTK_PAPER_NAME_EXECUTIVE);
- g_assert (p != NULL);
- g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 184);
- g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 266);
- g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "na_executive");
- g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "Executive");
- g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "Executive");
- g_assert (!gtk_paper_size_is_custom (p));
- gtk_paper_size_free (p);
-
- p = gtk_paper_size_new ("iso_a4_210x297mm");
- g_assert (p != NULL);
- g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 210);
- g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 297);
- g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "iso_a4");
- g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "A4");
- g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "A4");
- g_assert (!gtk_paper_size_is_custom (p));
- gtk_paper_size_free (p);
-
- p = gtk_paper_size_new ("custom_w1_20x30in");
- g_assert (p != NULL);
- g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_INCH), ==, 20);
- g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_INCH), ==, 30);
- g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "custom_w1");
- g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "custom_w1");
- g_assert (gtk_paper_size_is_custom (p));
- gtk_paper_size_free (p);
-}
-
-static void
-test_compare (void)
-{
- GtkPaperSize *a1, *a2, *b, *c;
-
- a1 = gtk_paper_size_new (GTK_PAPER_NAME_A4);
- a2 = gtk_paper_size_new ("iso_a4_210x297mm");
- b = gtk_paper_size_new (GTK_PAPER_NAME_B5);
- c = gtk_paper_size_new ("custom_w1_20x30in");
-
- g_assert (gtk_paper_size_is_equal (a1, a2));
- g_assert (!gtk_paper_size_is_equal (a1, b));
- g_assert (!gtk_paper_size_is_equal (a1, c));
- g_assert (!gtk_paper_size_is_equal (b, c));
-
- gtk_paper_size_free (a1);
- gtk_paper_size_free (a2);
- gtk_paper_size_free (b);
- gtk_paper_size_free (c);
-}
-
-static void
-test_units (void)
-{
- GtkPaperSize *p;
-
- p = gtk_paper_size_new (GTK_PAPER_NAME_A4);
-
- g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 210);
- g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 297);
-
- /* compare up to 2 decimals */
- g_assert_cmpint (100 * gtk_paper_size_get_width (p, GTK_UNIT_INCH), ==, 100 * 8.26);
- g_assert_cmpint (100 * gtk_paper_size_get_height (p, GTK_UNIT_INCH), ==, 100 * 11.69);
-
- g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_POINTS), ==, 595);
- g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_POINTS), ==, 841);
-
- gtk_paper_size_free (p);
-}
-
-int
-main (int argc, char *argv[])
-{
- gtk_test_init (&argc, &argv);
-
- g_test_add_func ("/paper-size/parse", test_parse);
- g_test_add_func ("/paper-size/compare", test_compare);
- g_test_add_func ("/paper-size/units", test_units);
-
- return g_test_run();
-}
diff --git a/gtk/tests/rbtree.c b/gtk/tests/rbtree.c
deleted file mode 100644
index d73d862f13..0000000000
--- a/gtk/tests/rbtree.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/* GtkRBTree tests.
- *
- * Copyright (C) 2011, Red Hat, Inc.
- * Authors: Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <locale.h>
-
-#include "../../gtk/gtkrbtree.h"
-
-/* _gtk_rbtree_test */
-
-static guint
-get_total_count (GtkRBNode *node)
-{
- guint child_total = 0;
-
- child_total += (guint) node->left->total_count;
- child_total += (guint) node->right->total_count;
-
- if (node->children)
- child_total += (guint) node->children->root->total_count;
-
- return child_total + 1;
-}
-
-static guint
-count_total (GtkRBTree *tree,
- GtkRBNode *node)
-{
- guint res;
-
- if (_gtk_rbtree_is_nil (node))
- return 0;
-
- res =
- count_total (tree, node->left) +
- count_total (tree, node->right) +
- (guint)1 +
- (node->children ? count_total (node->children, node->children->root) : 0);
-
- if (res != node->total_count)
- g_print ("total count incorrect for node\n");
-
- if (get_total_count (node) != node->total_count)
- g_error ("Node has incorrect total count %u, should be %u", node->total_count, get_total_count (node));
-
- return res;
-}
-
-static gint
-_count_nodes (GtkRBTree *tree,
- GtkRBNode *node)
-{
- gint res;
- if (_gtk_rbtree_is_nil (node))
- return 0;
-
- g_assert (node->left);
- g_assert (node->right);
-
- res = (_count_nodes (tree, node->left) +
- _count_nodes (tree, node->right) + 1);
-
- if (res != node->count)
- g_print ("Tree failed\n");
- return res;
-}
-
-static void
-_gtk_rbtree_test_height (GtkRBTree *tree,
- GtkRBNode *node)
-{
- gint computed_offset = 0;
-
- /* This whole test is sort of a useless truism. */
-
- if (!_gtk_rbtree_is_nil (node->left))
- computed_offset += node->left->offset;
-
- if (!_gtk_rbtree_is_nil (node->right))
- computed_offset += node->right->offset;
-
- if (node->children && !_gtk_rbtree_is_nil (node->children->root))
- computed_offset += node->children->root->offset;
-
- if (GTK_RBNODE_GET_HEIGHT (node) + computed_offset != node->offset)
- g_error ("node has broken offset\n");
-
- if (!_gtk_rbtree_is_nil (node->left))
- _gtk_rbtree_test_height (tree, node->left);
-
- if (!_gtk_rbtree_is_nil (node->right))
- _gtk_rbtree_test_height (tree, node->right);
-
- if (node->children && !_gtk_rbtree_is_nil (node->children->root))
- _gtk_rbtree_test_height (node->children, node->children->root);
-}
-
-static void
-_gtk_rbtree_test_dirty (GtkRBTree *tree,
- GtkRBNode *node,
- gint expected_dirtyness)
-{
-
- if (expected_dirtyness)
- {
- g_assert (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_COLUMN_INVALID) ||
- GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_INVALID) ||
- GTK_RBNODE_FLAG_SET (node->left, GTK_RBNODE_DESCENDANTS_INVALID) ||
- GTK_RBNODE_FLAG_SET (node->right, GTK_RBNODE_DESCENDANTS_INVALID) ||
- (node->children && GTK_RBNODE_FLAG_SET (node->children->root, GTK_RBNODE_DESCENDANTS_INVALID)));
- }
- else
- {
- g_assert (! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_COLUMN_INVALID) &&
- ! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_INVALID));
- if (!_gtk_rbtree_is_nil (node->left))
- g_assert (! GTK_RBNODE_FLAG_SET (node->left, GTK_RBNODE_DESCENDANTS_INVALID));
- if (!_gtk_rbtree_is_nil (node->right))
- g_assert (! GTK_RBNODE_FLAG_SET (node->right, GTK_RBNODE_DESCENDANTS_INVALID));
- if (node->children != NULL)
- g_assert (! GTK_RBNODE_FLAG_SET (node->children->root, GTK_RBNODE_DESCENDANTS_INVALID));
- }
-
- if (!_gtk_rbtree_is_nil (node->left))
- _gtk_rbtree_test_dirty (tree, node->left, GTK_RBNODE_FLAG_SET (node->left, GTK_RBNODE_DESCENDANTS_INVALID));
- if (!_gtk_rbtree_is_nil (node->right))
- _gtk_rbtree_test_dirty (tree, node->right, GTK_RBNODE_FLAG_SET (node->right, GTK_RBNODE_DESCENDANTS_INVALID));
- if (node->children != NULL && !_gtk_rbtree_is_nil (node->children->root))
- _gtk_rbtree_test_dirty (node->children, node->children->root, GTK_RBNODE_FLAG_SET (node->children->root, GTK_RBNODE_DESCENDANTS_INVALID));
-}
-
-static void _gtk_rbtree_test_structure (GtkRBTree *tree);
-
-static guint
-_gtk_rbtree_test_structure_helper (GtkRBTree *tree,
- GtkRBNode *node)
-{
- guint left_blacks, right_blacks;
-
- g_assert (!_gtk_rbtree_is_nil (node));
-
- g_assert (node->left != NULL);
- g_assert (node->right != NULL);
- g_assert (node->parent != NULL);
-
- if (!_gtk_rbtree_is_nil (node->left))
- {
- g_assert (node->left->parent == node);
- left_blacks = _gtk_rbtree_test_structure_helper (tree, node->left);
- }
- else
- left_blacks = 0;
-
- if (!_gtk_rbtree_is_nil (node->right))
- {
- g_assert (node->right->parent == node);
- right_blacks = _gtk_rbtree_test_structure_helper (tree, node->right);
- }
- else
- right_blacks = 0;
-
- if (node->children != NULL)
- {
- g_assert (node->children->parent_tree == tree);
- g_assert (node->children->parent_node == node);
-
- _gtk_rbtree_test_structure (node->children);
- }
-
- g_assert (left_blacks == right_blacks);
-
- return left_blacks + (GTK_RBNODE_GET_COLOR (node) == GTK_RBNODE_BLACK ? 1 : 0);
-}
-
-static void
-_gtk_rbtree_test_structure (GtkRBTree *tree)
-{
- g_assert (tree->root);
- if (_gtk_rbtree_is_nil (tree->root))
- return;
-
- g_assert (_gtk_rbtree_is_nil (tree->root->parent));
- _gtk_rbtree_test_structure_helper (tree, tree->root);
-}
-
-static void
-_gtk_rbtree_test (GtkRBTree *tree)
-{
- GtkRBTree *tmp_tree;
-
- if (tree == NULL)
- return;
-
- /* Test the entire tree */
- tmp_tree = tree;
- while (tmp_tree->parent_tree)
- tmp_tree = tmp_tree->parent_tree;
-
- if (_gtk_rbtree_is_nil (tmp_tree->root))
- return;
-
- _gtk_rbtree_test_structure (tmp_tree);
-
- g_assert ((_count_nodes (tmp_tree, tmp_tree->root->left) +
- _count_nodes (tmp_tree, tmp_tree->root->right) + 1) == tmp_tree->root->count);
-
- _gtk_rbtree_test_height (tmp_tree, tmp_tree->root);
- _gtk_rbtree_test_dirty (tmp_tree, tmp_tree->root, GTK_RBNODE_FLAG_SET (tmp_tree->root, GTK_RBNODE_DESCENDANTS_INVALID));
- g_assert (count_total (tmp_tree, tmp_tree->root) == tmp_tree->root->total_count);
-}
-
-/* gtk_rbtree_print() - unused, for debugging only */
-
-static void
-gtk_rbtree_print_node (GtkRBTree *tree,
- GtkRBNode *node,
- gint depth)
-{
- gint i;
- for (i = 0; i < depth; i++)
- g_print ("\t");
-
- g_print ("(%p - %s) (Offset %d) (Parity %d) (Validity %d%d%d)\n",
- node,
- (GTK_RBNODE_GET_COLOR (node) == GTK_RBNODE_BLACK)?"BLACK":" RED ",
- node->offset,
- node->total_count,
- (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_DESCENDANTS_INVALID))?1:0,
- (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_INVALID))?1:0,
- (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_COLUMN_INVALID))?1:0);
- if (node->children != NULL)
- {
- g_print ("Looking at child.\n");
- gtk_rbtree_print_node (node->children, node->children->root, depth + 1);
- g_print ("Done looking at child.\n");
- }
- if (!_gtk_rbtree_is_nil (node->left))
- {
- gtk_rbtree_print_node (tree, node->left, depth+1);
- }
- if (!_gtk_rbtree_is_nil (node->right))
- {
- gtk_rbtree_print_node (tree, node->right, depth+1);
- }
-}
-
-/* not static so the debugger finds it. */
-void gtk_rbtree_print (GtkRBTree *tree);
-
-void
-gtk_rbtree_print (GtkRBTree *tree)
-{
- g_return_if_fail (tree != NULL);
-
- if (_gtk_rbtree_is_nil (tree->root))
- g_print ("Empty tree...\n");
- else
- gtk_rbtree_print_node (tree, tree->root, 0);
-}
-
-/* actual tests */
-
-static guint
-append_elements (GtkRBTree *tree,
- guint depth,
- guint elements_per_depth,
- gboolean check,
- guint height)
-{
- GtkRBNode *node;
- guint i;
-
- g_assert (depth > 0);
-
- node = NULL;
- depth--;
-
- for (i = 0; i < elements_per_depth; i++)
- {
- node = _gtk_rbtree_insert_after (tree, node, ++height, TRUE);
- if (depth)
- {
- node->children = _gtk_rbtree_new ();
- node->children->parent_tree = tree;
- node->children->parent_node = node;
- height = append_elements (node->children, depth, elements_per_depth, check, height);
- }
- if (check)
- _gtk_rbtree_test (tree);
- }
-
- return height;
-}
-
-static GtkRBTree *
-create_rbtree (guint depth,
- guint elements_per_depth,
- gboolean check)
-{
- GtkRBTree *tree;
-
- tree = _gtk_rbtree_new ();
-
- append_elements (tree, depth, elements_per_depth, check, 0);
-
- _gtk_rbtree_test (tree);
-
- return tree;
-}
-
-static void
-test_create (void)
-{
- GtkRBTree *tree;
-
- tree = create_rbtree (5, 5, TRUE);
-
- _gtk_rbtree_free (tree);
-}
-
-static void
-test_insert_after (void)
-{
- guint i;
- GtkRBTree *tree;
- GtkRBNode *node;
-
- tree = _gtk_rbtree_new ();
- node = NULL;
-
- for (i = 1; i <= 100; i++)
- {
- node = _gtk_rbtree_insert_after (tree, node, i, TRUE);
- _gtk_rbtree_test (tree);
- g_assert (tree->root->count == i);
- g_assert (tree->root->total_count == i);
- g_assert (tree->root->offset == i * (i + 1) / 2);
- }
-
- _gtk_rbtree_free (tree);
-}
-
-static void
-test_insert_before (void)
-{
- guint i;
- GtkRBTree *tree;
- GtkRBNode *node;
-
- tree = _gtk_rbtree_new ();
- node = NULL;
-
- for (i = 1; i <= 100; i++)
- {
- node = _gtk_rbtree_insert_before (tree, node, i, TRUE);
- _gtk_rbtree_test (tree);
- g_assert (tree->root->count == i);
- g_assert (tree->root->total_count == i);
- g_assert (tree->root->offset == i * (i + 1) / 2);
- }
-
- _gtk_rbtree_free (tree);
-}
-
-static void
-test_remove_node (void)
-{
- GtkRBTree *tree;
-
- tree = create_rbtree (3, 16, g_test_thorough ());
-
- while (tree->root->count > 1)
- {
- GtkRBTree *find_tree;
- GtkRBNode *find_node;
- guint i;
-
- i = g_test_rand_int_range (0, tree->root->total_count);
- if (!_gtk_rbtree_find_index (tree, i, &find_tree, &find_node))
- {
- /* We search an available index, so we mustn't fail. */
- g_assert_not_reached ();
- }
-
- _gtk_rbtree_test (find_tree);
-
- if (find_tree->root->count == 1)
- {
- _gtk_rbtree_remove (find_tree);
- }
- else
- _gtk_rbtree_remove_node (find_tree, find_node);
- _gtk_rbtree_test (tree);
- }
-
- _gtk_rbtree_free (tree);
-}
-
-static void
-test_remove_root (void)
-{
- GtkRBTree *tree;
- GtkRBNode *node;
-
- tree = _gtk_rbtree_new ();
-
- node = _gtk_rbtree_insert_after (tree, NULL, 1, TRUE);
- _gtk_rbtree_insert_after (tree, node, 2, TRUE);
- _gtk_rbtree_insert_before (tree, node, 3, TRUE);
-
- _gtk_rbtree_remove_node (tree, node);
-
- _gtk_rbtree_free (tree);
-}
-
-static gint *
-fisher_yates_shuffle (guint n_items)
-{
- gint *list;
- guint i, j;
-
- list = g_new (gint, n_items);
-
- for (i = 0; i < n_items; i++)
- {
- j = g_random_int_range (0, i + 1);
- list[i] = list[j];
- list[j] = i;
- }
-
- return list;
-}
-
-static GtkRBTree *
-create_unsorted_tree (gint *order,
- guint n)
-{
- GtkRBTree *tree;
- GtkRBNode *node;
- guint i;
-
- tree = _gtk_rbtree_new ();
- node = NULL;
-
- for (i = 0; i < n; i++)
- {
- node = _gtk_rbtree_insert_after (tree, node, 0, TRUE);
- }
-
- for (i = 0; i < n; i++)
- {
- node = _gtk_rbtree_find_count (tree, order[i] + 1);
- _gtk_rbtree_node_set_height (tree, node, i);
- }
-
- _gtk_rbtree_test (tree);
-
- return tree;
-}
-
-static void
-test_reorder (void)
-{
- guint n = g_test_perf () ? 1000000 : 100;
- GtkRBTree *tree;
- GtkRBNode *node;
- gint *reorder;
- guint i;
- double elapsed;
-
- reorder = fisher_yates_shuffle (n);
- tree = create_unsorted_tree (reorder, n);
-
- g_test_timer_start ();
-
- _gtk_rbtree_reorder (tree, reorder, n);
-
- elapsed = g_test_timer_elapsed ();
- if (g_test_perf ())
- g_test_minimized_result (elapsed, "reordering rbtree with %u items: %gsec", n, elapsed);
-
- _gtk_rbtree_test (tree);
-
- for (node = _gtk_rbtree_first (tree), i = 0;
- node != NULL;
- node = _gtk_rbtree_next (tree, node), i++)
- {
- g_assert (GTK_RBNODE_GET_HEIGHT (node) == i);
- }
- g_assert (i == n);
-
- _gtk_rbtree_free (tree);
-}
-
-int
-main (int argc, char *argv[])
-{
- g_test_init (&argc, &argv, NULL);
- setlocale (LC_ALL, "C");
- g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=%s");
-
- g_test_add_func ("/rbtree/create", test_create);
- g_test_add_func ("/rbtree/insert_after", test_insert_after);
- g_test_add_func ("/rbtree/insert_before", test_insert_before);
- g_test_add_func ("/rbtree/remove_node", test_remove_node);
- g_test_add_func ("/rbtree/remove_root", test_remove_root);
- g_test_add_func ("/rbtree/reorder", test_reorder);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/recentmanager.c b/gtk/tests/recentmanager.c
deleted file mode 100644
index 84b7c670b8..0000000000
--- a/gtk/tests/recentmanager.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* GTK - The GIMP Toolkit
- * gtkrecentmanager.c: a manager for the recently used resources
- *
- * Copyright (C) 2006 Emmanuele Bassi
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <glib/gstdio.h>
-#include <gtk/gtk.h>
-
-const gchar *uri = "file:///tmp/testrecentchooser.txt";
-const gchar *uri2 = "file:///tmp/testrecentchooser2.txt";
-
-static void
-recent_manager_get_default (void)
-{
- GtkRecentManager *manager;
- GtkRecentManager *manager2;
-
- manager = gtk_recent_manager_get_default ();
- g_assert (manager != NULL);
-
- manager2 = gtk_recent_manager_get_default ();
- g_assert (manager == manager2);
-}
-
-static void
-recent_manager_add (void)
-{
- GtkRecentManager *manager;
- GtkRecentData *recent_data;
- gboolean res;
-
- manager = gtk_recent_manager_get_default ();
-
- recent_data = g_slice_new0 (GtkRecentData);
-
- /* mime type is mandatory */
- recent_data->mime_type = NULL;
- recent_data->app_name = "testrecentchooser";
- recent_data->app_exec = "testrecentchooser %u";
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- res = gtk_recent_manager_add_full (manager,
- uri,
- recent_data);
- }
- g_test_trap_assert_failed ();
-
- /* app name is mandatory */
- recent_data->mime_type = "text/plain";
- recent_data->app_name = NULL;
- recent_data->app_exec = "testrecentchooser %u";
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- res = gtk_recent_manager_add_full (manager,
- uri,
- recent_data);
- }
- g_test_trap_assert_failed ();
-
- /* app exec is mandatory */
- recent_data->mime_type = "text/plain";
- recent_data->app_name = "testrecentchooser";
- recent_data->app_exec = NULL;
- if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
- {
- res = gtk_recent_manager_add_full (manager,
- uri,
- recent_data);
- }
- g_test_trap_assert_failed ();
-
- recent_data->mime_type = "text/plain";
- recent_data->app_name = "testrecentchooser";
- recent_data->app_exec = "testrecentchooser %u";
- res = gtk_recent_manager_add_full (manager,
- uri,
- recent_data);
- g_assert (res == TRUE);
-
- g_slice_free (GtkRecentData, recent_data);
-}
-
-typedef struct {
- GMainLoop *main_loop;
- gint counter;
-} AddManyClosure;
-
-static void
-check_bulk (GtkRecentManager *manager,
- gpointer data)
-{
- AddManyClosure *closure = data;
-
- if (g_test_verbose ())
- g_print (G_STRLOC ": counter = %d\n", closure->counter);
-
- g_assert_cmpint (closure->counter, ==, 100);
-
- if (g_main_loop_is_running (closure->main_loop))
- g_main_loop_quit (closure->main_loop);
-}
-
-static void
-recent_manager_add_many (void)
-{
- GtkRecentManager *manager = g_object_new (GTK_TYPE_RECENT_MANAGER,
- "filename", "recently-used.xbel",
- NULL);
- AddManyClosure *closure = g_new (AddManyClosure, 1);
- GtkRecentData *data = g_slice_new0 (GtkRecentData);
- gint i;
-
- closure->main_loop = g_main_loop_new (NULL, FALSE);
- closure->counter = 0;
-
- g_signal_connect (manager, "changed", G_CALLBACK (check_bulk), closure);
-
- for (i = 0; i < 100; i++)
- {
- gchar *new_uri;
-
- data->mime_type = "text/plain";
- data->app_name = "testrecentchooser";
- data->app_exec = "testrecentchooser %u";
-
- if (g_test_verbose ())
- g_print (G_STRLOC ": adding item %d\n", i);
-
- new_uri = g_strdup_printf ("file:///doesnotexist-%d.txt", i);
- gtk_recent_manager_add_full (manager, new_uri, data);
- g_free (new_uri);
-
- closure->counter += 1;
- }
-
- g_main_loop_run (closure->main_loop);
-
- g_main_loop_unref (closure->main_loop);
- g_slice_free (GtkRecentData, data);
- g_free (closure);
- g_object_unref (manager);
-
- g_assert_cmpint (g_unlink ("recently-used.xbel"), ==, 0);
-}
-
-static void
-recent_manager_has_item (void)
-{
- GtkRecentManager *manager;
- gboolean res;
-
- manager = gtk_recent_manager_get_default ();
-
- res = gtk_recent_manager_has_item (manager, "file:///tmp/testrecentdoesnotexist.txt");
- g_assert (res == FALSE);
-
- res = gtk_recent_manager_has_item (manager, uri);
- g_assert (res == TRUE);
-}
-
-static void
-recent_manager_move_item (void)
-{
- GtkRecentManager *manager;
- gboolean res;
- GError *error;
-
- manager = gtk_recent_manager_get_default ();
-
- error = NULL;
- res = gtk_recent_manager_move_item (manager,
- "file:///tmp/testrecentdoesnotexist.txt",
- uri2,
- &error);
- g_assert (res == FALSE);
- g_assert (error != NULL);
- g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
- g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
- g_error_free (error);
-
- error = NULL;
- res = gtk_recent_manager_move_item (manager, uri, uri2, &error);
- g_assert (res == TRUE);
- g_assert (error == NULL);
-
- res = gtk_recent_manager_has_item (manager, uri);
- g_assert (res == FALSE);
-
- res = gtk_recent_manager_has_item (manager, uri2);
- g_assert (res == TRUE);
-}
-
-static void
-recent_manager_lookup_item (void)
-{
- GtkRecentManager *manager;
- GtkRecentInfo *info;
- GError *error;
-
- manager = gtk_recent_manager_get_default ();
-
- error = NULL;
- info = gtk_recent_manager_lookup_item (manager,
- "file:///tmp/testrecentdoesnotexist.txt",
- &error);
- g_assert (info == NULL);
- g_assert (error != NULL);
- g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
- g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
- g_error_free (error);
-
- error = NULL;
- info = gtk_recent_manager_lookup_item (manager, uri2, &error);
- g_assert (info != NULL);
- g_assert (error == NULL);
-
- g_assert (gtk_recent_info_has_application (info, "testrecentchooser"));
-
- gtk_recent_info_unref (info);
-}
-
-static void
-recent_manager_remove_item (void)
-{
- GtkRecentManager *manager;
- gboolean res;
- GError *error;
-
- manager = gtk_recent_manager_get_default ();
-
- error = NULL;
- res = gtk_recent_manager_remove_item (manager,
- "file:///tmp/testrecentdoesnotexist.txt",
- &error);
- g_assert (res == FALSE);
- g_assert (error != NULL);
- g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
- g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
- g_error_free (error);
-
- /* remove an item that's actually there */
- error = NULL;
- res = gtk_recent_manager_remove_item (manager, uri2, &error);
- g_assert (res == TRUE);
- g_assert (error == NULL);
-
- res = gtk_recent_manager_has_item (manager, uri2);
- g_assert (res == FALSE);
-}
-
-static void
-recent_manager_purge (void)
-{
- GtkRecentManager *manager;
- GtkRecentData *recent_data;
- gint n;
- GError *error;
-
- manager = gtk_recent_manager_get_default ();
-
- /* purge, add 1, purge again and check that 1 item has been purged */
- error = NULL;
- n = gtk_recent_manager_purge_items (manager, &error);
- g_assert (error == NULL);
-
- recent_data = g_slice_new0 (GtkRecentData);
- recent_data->mime_type = "text/plain";
- recent_data->app_name = "testrecentchooser";
- recent_data->app_exec = "testrecentchooser %u";
- gtk_recent_manager_add_full (manager, uri, recent_data);
- g_slice_free (GtkRecentData, recent_data);
-
- error = NULL;
- n = gtk_recent_manager_purge_items (manager, &error);
- g_assert (error == NULL);
- g_assert (n == 1);
-}
-
-int
-main (int argc,
- char **argv)
-{
- gtk_test_init (&argc, &argv, NULL);
-
- g_test_add_func ("/recent-manager/get-default", recent_manager_get_default);
- g_test_add_func ("/recent-manager/add", recent_manager_add);
- g_test_add_func ("/recent-manager/add-many", recent_manager_add_many);
- g_test_add_func ("/recent-manager/has-item", recent_manager_has_item);
- g_test_add_func ("/recent-manager/move-item", recent_manager_move_item);
- g_test_add_func ("/recent-manager/lookup-item", recent_manager_lookup_item);
- g_test_add_func ("/recent-manager/remove-item", recent_manager_remove_item);
- g_test_add_func ("/recent-manager/purge", recent_manager_purge);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/regression-tests.c b/gtk/tests/regression-tests.c
deleted file mode 100644
index e44eaa65a0..0000000000
--- a/gtk/tests/regression-tests.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Regression tests
- *
- * Copyright (C) 2011, Red Hat, Inc.
- * Authors: Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-static void
-test_9d6da33ff5c5e41e3521e1afd63d2d67bc915753 (void)
-{
- GtkWidget *window, *label;
-
- window = gtk_window_new (GTK_WINDOW_POPUP);
- label = gtk_label_new ("I am sensitive.");
- gtk_container_add (GTK_CONTAINER (window), label);
-
- gtk_widget_set_sensitive (label, FALSE);
- gtk_widget_set_sensitive (window, FALSE);
- gtk_widget_set_sensitive (label, TRUE);
- gtk_widget_set_sensitive (window, TRUE);
-
- g_assert (gtk_widget_get_sensitive (label));
-
- gtk_widget_destroy (window);
-}
-
-static void
-test_94f00eb04dd1433cf1cc9a3341f485124e38abd1 (void)
-{
- GtkWidget *window, *label;
-
- window = gtk_window_new (GTK_WINDOW_POPUP);
- label = gtk_label_new ("I am insensitive.");
- gtk_container_add (GTK_CONTAINER (window), label);
-
- gtk_widget_set_sensitive (window, FALSE);
- gtk_widget_set_sensitive (label, FALSE);
- gtk_widget_set_sensitive (label, TRUE);
-
- g_assert (!gtk_widget_is_sensitive (label));
-
- gtk_widget_destroy (window);
-}
-
-int
-main (int argc, char *argv[])
-{
- gtk_test_init (&argc, &argv, NULL);
-
- g_test_add_func ("/regression/94f00eb04dd1433cf1cc9a3341f485124e38abd1", test_94f00eb04dd1433cf1cc9a3341f485124e38abd1);
- g_test_add_func ("/regression/9d6da33ff5c5e41e3521e1afd63d2d67bc915753", test_9d6da33ff5c5e41e3521e1afd63d2d67bc915753);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/sortmodel.c b/gtk/tests/sortmodel.c
deleted file mode 100644
index a24f8a3630..0000000000
--- a/gtk/tests/sortmodel.c
+++ /dev/null
@@ -1,1243 +0,0 @@
-/* Extensive GtkTreeModelSort tests.
- * Copyright (C) 2009,2011 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-#include "treemodel.h"
-#include "gtktreemodelrefcount.h"
-
-
-static void
-ref_count_single_level (void)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
-
- assert_root_level_unreferenced (ref_model);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (sort_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_two_levels (void)
-{
- GtkTreeIter parent1, parent2, iter;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
-
- assert_entire_model_unreferenced (ref_model);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- assert_root_level_referenced (ref_model, 1);
- assert_node_ref_count (ref_model, &iter, 0);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter, 1);
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter, 0);
-
- gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
-
- assert_root_level_referenced (ref_model, 1);
- assert_node_ref_count (ref_model, &iter, 0);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (sort_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_three_levels (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- assert_entire_model_unreferenced (ref_model);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- assert_root_level_referenced (ref_model, 1);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
-
- assert_root_level_referenced (ref_model, 1);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 0);
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_path_append_index (path, 1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_path_up (path);
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (sort_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_delete_row (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkTreePath *path;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- assert_entire_model_unreferenced (ref_model);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- assert_root_level_referenced (ref_model, 1);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 0);
- assert_level_unreferenced (ref_model, &parent1);
- assert_level_unreferenced (ref_model, &parent2);
-
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 1);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter_parent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 2);
- assert_level_referenced (ref_model, 1, &parent1);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_level_referenced (ref_model, 1, &parent2);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent1);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_level_referenced (ref_model, 1, &parent2);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
-
- gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
-
- gtk_widget_destroy (tree_view);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (sort_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_cleanup (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- gtk_widget_destroy (tree_view);
-
- assert_node_ref_count (ref_model, &grandparent1, 0);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 1);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (sort_model);
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_row_ref (void)
-{
- GtkTreeIter grandparent1, grandparent2, parent1, parent2;
- GtkTreeIter iter_parent1, iter_parent2;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
- GtkTreePath *path;
- GtkTreeRowReference *row_ref;
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- /* + grandparent1
- * + grandparent2
- * + parent1
- * + iter_parent1
- * + parent2
- * + iter_parent2
- * + iter_parent2
- */
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
- gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
- row_ref = gtk_tree_row_reference_new (sort_model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- /* Referenced because the node is visible, its child level is built
- * and referenced by the row ref.
- */
- assert_node_ref_count (ref_model, &grandparent2, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- /* Referenced by the row ref and because its child level is built. */
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 2);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &parent2, 1);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 0);
-
- path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
- row_ref = gtk_tree_row_reference_new (sort_model, path);
- gtk_tree_path_free (path);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- /* Referenced because the node is visible, its child level is built
- * and referenced by the row ref.
- */
- assert_node_ref_count (ref_model, &grandparent2, 3);
- assert_node_ref_count (ref_model, &parent1, 0);
- /* Referenced by the row ref and because its child level is built. */
- assert_node_ref_count (ref_model, &parent2, 2);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent2, 1);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), &parent2);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
-
- gtk_tree_row_reference_free (row_ref);
-
- assert_node_ref_count (ref_model, &grandparent1, 1);
- assert_node_ref_count (ref_model, &grandparent2, 1);
- assert_node_ref_count (ref_model, &parent1, 0);
- assert_node_ref_count (ref_model, &iter_parent1, 0);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (sort_model);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_reorder_single (void)
-{
- GtkTreeIter iter1, iter2, iter3, iter4, iter5;
- GtkTreeIter siter1, siter2, siter3, siter4, siter5;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_INT };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
- 0, 30, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
- 0, 40, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
- 0, 10, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
- 0, 20, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
- 0, 60, -1);
-
- assert_root_level_unreferenced (ref_model);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter5);
-
- assert_node_ref_count (ref_model, &iter1, 3);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &iter3, 4);
- assert_node_ref_count (ref_model, &iter4, 1);
- assert_node_ref_count (ref_model, &iter5, 2);
-
- /* Sort */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_ASCENDING);
-
- assert_node_ref_count (ref_model, &iter1, 3);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &iter3, 4);
- assert_node_ref_count (ref_model, &iter4, 1);
- assert_node_ref_count (ref_model, &iter5, 2);
-
- /* Re-translate the iters after sorting */
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter5);
-
- assert_entire_model_referenced (ref_model, 1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (sort_model);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-ref_count_reorder_two (void)
-{
- GtkTreeIter iter1, iter2, iter3, iter4, iter5;
- GtkTreeIter citer1, citer2, citer3, citer4, citer5;
- GtkTreeIter siter1, siter2, siter3, siter4, siter5;
- GtkTreeIter sciter1, sciter2, sciter3, sciter4, sciter5;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
- GType column_types[] = { G_TYPE_INT };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
- 0, 30, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
- 0, 40, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
- 0, 10, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
- 0, 20, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
- 0, 60, -1);
-
- /* Child level */
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer1, &iter1, 0,
- 0, 30, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer2, &iter1, 1,
- 0, 40, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer3, &iter1, 2,
- 0, 10, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer4, &iter1, 3,
- 0, 20, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer5, &iter1, 4,
- 0, 60, -1);
-
- assert_root_level_unreferenced (ref_model);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- assert_node_ref_count (ref_model, &iter1, 2);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &iter3, 1);
- assert_node_ref_count (ref_model, &iter4, 1);
- assert_node_ref_count (ref_model, &iter5, 1);
-
- assert_level_referenced (ref_model, 1, &iter1);
-
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
-
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter1, &citer1);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter2, &citer2);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter3, &citer3);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter4, &citer4);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter5, &citer5);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter5);
-
- assert_node_ref_count (ref_model, &iter1, 4);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &iter3, 4);
- assert_node_ref_count (ref_model, &iter4, 1);
- assert_node_ref_count (ref_model, &iter5, 2);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter3);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter3);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
-
- gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter1);
-
- assert_node_ref_count (ref_model, &citer1, 2);
- assert_node_ref_count (ref_model, &citer2, 1);
- assert_node_ref_count (ref_model, &citer3, 3);
- assert_node_ref_count (ref_model, &citer4, 1);
- assert_node_ref_count (ref_model, &citer5, 4);
-
- /* Sort */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_ASCENDING);
-
- assert_node_ref_count (ref_model, &iter1, 4);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &iter3, 4);
- assert_node_ref_count (ref_model, &iter4, 1);
- assert_node_ref_count (ref_model, &iter5, 2);
-
- assert_node_ref_count (ref_model, &citer1, 2);
- assert_node_ref_count (ref_model, &citer2, 1);
- assert_node_ref_count (ref_model, &citer3, 3);
- assert_node_ref_count (ref_model, &citer4, 1);
- assert_node_ref_count (ref_model, &citer5, 4);
-
- /* Re-translate the iters after sorting */
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
-
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter1, &citer1);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter2, &citer2);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter3, &citer3);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter4, &citer4);
- gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter5, &citer5);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter5);
-
- assert_node_ref_count (ref_model, &iter1, 2);
- assert_node_ref_count (ref_model, &iter2, 1);
- assert_node_ref_count (ref_model, &iter3, 1);
- assert_node_ref_count (ref_model, &iter4, 1);
- assert_node_ref_count (ref_model, &iter5, 1);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter3);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter3);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
-
- gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter1);
-
- assert_level_referenced (ref_model, 1, &iter1);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (sort_model);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-check_sort_order (GtkTreeModel *sort_model,
- GtkSortType sort_order,
- const char *parent_path)
-{
- int prev_value;
- GtkTreeIter siter;
-
- if (!parent_path)
- gtk_tree_model_get_iter_first (sort_model, &siter);
- else
- {
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (parent_path);
- gtk_tree_path_append_index (path, 0);
-
- gtk_tree_model_get_iter (sort_model, &siter, path);
-
- gtk_tree_path_free (path);
- }
-
- if (sort_order == GTK_SORT_ASCENDING)
- prev_value = -1;
- else
- prev_value = INT_MAX;
-
- do
- {
- int value;
-
- gtk_tree_model_get (sort_model, &siter, 0, &value, -1);
- if (sort_order == GTK_SORT_ASCENDING)
- g_assert (prev_value <= value);
- else
- g_assert (prev_value >= value);
-
- prev_value = value;
- }
- while (gtk_tree_model_iter_next (sort_model, &siter));
-}
-
-static void
-rows_reordered_single_level (void)
-{
- GtkTreeIter iter1, iter2, iter3, iter4, iter5;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
- SignalMonitor *monitor;
- GtkTreePath *path;
- GType column_types[] = { G_TYPE_INT };
- int order[][5] =
- {
- { 2, 3, 0, 1, 4 },
- { 4, 3, 2, 1, 0 },
- { 2, 1, 4, 3, 0 }
- };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
- 0, 30, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
- 0, 40, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
- 0, 10, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
- 0, 20, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
- 0, 60, -1);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- monitor = signal_monitor_new (sort_model);
-
- /* Sort */
- path = gtk_tree_path_new ();
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- path, order[0], 5);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_ASCENDING);
- signal_monitor_assert_is_empty (monitor);
- check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
-
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- path, order[1], 5);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_DESCENDING);
- signal_monitor_assert_is_empty (monitor);
- check_sort_order (sort_model, GTK_SORT_DESCENDING, NULL);
-
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- path, order[2], 5);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
- GTK_SORT_ASCENDING);
- signal_monitor_assert_is_empty (monitor);
-
- gtk_tree_path_free (path);
- signal_monitor_free (monitor);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (sort_model);
-
- assert_entire_model_unreferenced (ref_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-rows_reordered_two_levels (void)
-{
- GtkTreeIter iter1, iter2, iter3, iter4, iter5;
- GtkTreeIter citer1, citer2, citer3, citer4, citer5;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
- SignalMonitor *monitor;
- GtkTreePath *path, *child_path;
- GType column_types[] = { G_TYPE_INT };
- int order[][5] =
- {
- { 2, 3, 0, 1, 4 },
- { 4, 3, 2, 1, 0 },
- { 2, 1, 4, 3, 0 }
- };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
- 0, 30, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
- 0, 40, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
- 0, 10, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
- 0, 20, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
- 0, 60, -1);
-
- /* Child level */
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer1, &iter1, 0,
- 0, 30, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer2, &iter1, 1,
- 0, 40, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer3, &iter1, 2,
- 0, 10, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer4, &iter1, 3,
- 0, 20, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer5, &iter1, 4,
- 0, 60, -1);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
-
- monitor = signal_monitor_new (sort_model);
-
- /* Sort */
- path = gtk_tree_path_new ();
- child_path = gtk_tree_path_new_from_indices (2, -1);
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- path, order[0], 5);
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- child_path, order[0], 5);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_ASCENDING);
- signal_monitor_assert_is_empty (monitor);
- check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
- /* The parent node of the child level moved due to sorting */
- check_sort_order (sort_model, GTK_SORT_ASCENDING, "2");
-
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- path, order[1], 5);
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- child_path, order[1], 5);
- gtk_tree_path_free (child_path);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_DESCENDING);
- signal_monitor_assert_is_empty (monitor);
- check_sort_order (sort_model, GTK_SORT_DESCENDING, NULL);
- /* The parent node of the child level moved due to sorting */
- check_sort_order (sort_model, GTK_SORT_DESCENDING, "2");
-
- child_path = gtk_tree_path_new_from_indices (0, -1);
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- path, order[2], 5);
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- child_path, order[2], 5);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
- GTK_SORT_ASCENDING);
- signal_monitor_assert_is_empty (monitor);
-
- gtk_tree_path_free (path);
- gtk_tree_path_free (child_path);
- signal_monitor_free (monitor);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (sort_model);
-
- g_object_unref (ref_model);
-}
-
-static void
-sorted_insert (void)
-{
- GtkTreeIter iter1, iter2, iter3, iter4, iter5, new_iter;
- GtkTreeModel *model;
- GtkTreeModelRefCount *ref_model;
- GtkTreeModel *sort_model;
- GtkWidget *tree_view;
- SignalMonitor *monitor;
- GtkTreePath *path;
- GType column_types[] = { G_TYPE_INT };
- int order0[] = { 1, 2, 3, 0, 4, 5, 6 };
-
- model = gtk_tree_model_ref_count_new ();
- ref_model = GTK_TREE_MODEL_REF_COUNT (model);
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
- column_types);
-
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
- 0, 30, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
- 0, 40, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
- 0, 10, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
- 0, 20, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
- 0, 60, -1);
-
- sort_model = gtk_tree_model_sort_new_with_model (model);
- tree_view = gtk_tree_view_new_with_model (sort_model);
-
- /* Sort */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_ASCENDING);
- check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
-
- monitor = signal_monitor_new (sort_model);
-
- /* Insert a new item */
- signal_monitor_append_signal (monitor, ROW_INSERTED, "4");
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &new_iter, NULL,
- 5, 0, 50, -1);
- signal_monitor_assert_is_empty (monitor);
- check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
-
- /* Sort the tree sort and append a new item */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
- 0, GTK_SORT_ASCENDING);
- check_sort_order (model, GTK_SORT_ASCENDING, NULL);
-
- path = gtk_tree_path_new ();
- signal_monitor_append_signal (monitor, ROW_INSERTED, "0");
- signal_monitor_append_signal_reordered (monitor,
- ROWS_REORDERED,
- path, order0, 7);
- signal_monitor_append_signal (monitor, ROW_CHANGED, "3");
- gtk_tree_store_append (GTK_TREE_STORE (model), &new_iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (model), &new_iter, 0, 35, -1);
- check_sort_order (model, GTK_SORT_ASCENDING, NULL);
- check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
-
- gtk_tree_path_free (path);
- signal_monitor_free (monitor);
-
- gtk_widget_destroy (tree_view);
- g_object_unref (sort_model);
-
- g_object_unref (ref_model);
-}
-
-
-static void
-specific_bug_300089 (void)
-{
- /* Test case for GNOME Bugzilla bug 300089. Written by
- * Matthias Clasen.
- */
- GtkTreeModel *sort_model, *child_model;
- GtkTreePath *path;
- GtkTreeIter iter, iter2, sort_iter;
-
- g_test_bug ("300089");
-
- child_model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_STRING));
-
- gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
- gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "B", -1);
-
- gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
- gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "D", -1);
- gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
- gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "E", -1);
-
- gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "C", -1);
-
-
- sort_model = GTK_TREE_MODEL (gtk_tree_model_sort_new_with_model (child_model));
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- 0, GTK_SORT_ASCENDING);
-
- path = gtk_tree_path_new_from_indices (1, 1, -1);
-
- /* make sure a level is constructed */
- gtk_tree_model_get_iter (sort_model, &sort_iter, path);
-
- /* change the "E" row in a way that causes it to change position */
- gtk_tree_model_get_iter (child_model, &iter, path);
- gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
-
- gtk_tree_path_free (path);
-}
-
-static void
-specific_bug_364946 (void)
-{
- /* This is a test case for GNOME Bugzilla bug 364946. It was written
- * by Andreas Koehler.
- */
- GtkTreeStore *store;
- GtkTreeIter a, aa, aaa, aab, iter;
- GtkTreeModel *s_model;
-
- g_test_bug ("364946");
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (store, &a, NULL);
- gtk_tree_store_set (store, &a, 0, "0", -1);
-
- gtk_tree_store_append (store, &aa, &a);
- gtk_tree_store_set (store, &aa, 0, "0:0", -1);
-
- gtk_tree_store_append (store, &aaa, &aa);
- gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
-
- gtk_tree_store_append (store, &aab, &aa);
- gtk_tree_store_set (store, &aab, 0, "0:0:1", -1);
-
- s_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (s_model), 0,
- GTK_SORT_ASCENDING);
-
- gtk_tree_model_get_iter_from_string (s_model, &iter, "0:0:0");
-
- gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
- gtk_tree_store_remove (store, &aaa);
- gtk_tree_store_remove (store, &aab);
-
- gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (s_model));
-}
-
-static void
-iter_test (GtkTreeModel *model)
-{
- GtkTreeIter a, b;
-
- g_assert (gtk_tree_model_get_iter_first (model, &a));
-
- g_assert (gtk_tree_model_iter_next (model, &a));
- g_assert (gtk_tree_model_iter_next (model, &a));
- b = a;
- g_assert (!gtk_tree_model_iter_next (model, &b));
-
- g_assert (gtk_tree_model_iter_previous (model, &a));
- g_assert (gtk_tree_model_iter_previous (model, &a));
- b = a;
- g_assert (!gtk_tree_model_iter_previous (model, &b));
-}
-
-static void
-specific_bug_674587 (void)
-{
- GtkListStore *l;
- GtkTreeStore *t;
- GtkTreeModel *m;
- GtkTreeIter a;
-
- l = gtk_list_store_new (1, G_TYPE_STRING);
-
- gtk_list_store_append (l, &a);
- gtk_list_store_set (l, &a, 0, "0", -1);
- gtk_list_store_append (l, &a);
- gtk_list_store_set (l, &a, 0, "1", -1);
- gtk_list_store_append (l, &a);
- gtk_list_store_set (l, &a, 0, "2", -1);
-
- iter_test (GTK_TREE_MODEL (l));
-
- g_object_unref (l);
-
- t = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (t, &a, NULL);
- gtk_tree_store_set (t, &a, 0, "0", -1);
- gtk_tree_store_append (t, &a, NULL);
- gtk_tree_store_set (t, &a, 0, "1", -1);
- gtk_tree_store_append (t, &a, NULL);
- gtk_tree_store_set (t, &a, 0, "2", -1);
-
- iter_test (GTK_TREE_MODEL (t));
-
- m = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (t));
-
- iter_test (m);
-
- g_object_unref (t);
- g_object_unref (m);
-}
-
-static void
-row_deleted_cb (GtkTreeModel *tree_model,
- GtkTreePath *path,
- guint *count)
-{
- *count = *count + 1;
-}
-
-static void
-specific_bug_698846 (void)
-{
- GtkListStore *store;
- GtkTreeModel *sorted;
- GtkTreeIter iter;
- guint count = 0;
-
- g_test_bug ("698846");
-
- store = gtk_list_store_new (1, G_TYPE_STRING);
- sorted = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
-
- gtk_list_store_insert_with_values (store, &iter, 0, 0, "a", -1);
- gtk_list_store_insert_with_values (store, &iter, 1, 0, "b", -1);
-
- g_signal_connect (sorted, "row-deleted", G_CALLBACK (row_deleted_cb), &count);
-
- gtk_list_store_clear (store);
-
- g_assert_cmpuint (count, ==, 2);
-}
-
-/* main */
-
-void
-register_sort_model_tests (void)
-{
- g_test_add_func ("/TreeModelSort/ref-count/single-level",
- ref_count_single_level);
- g_test_add_func ("/TreeModelSort/ref-count/two-levels",
- ref_count_two_levels);
- g_test_add_func ("/TreeModelSort/ref-count/three-levels",
- ref_count_three_levels);
- g_test_add_func ("/TreeModelSort/ref-count/delete-row",
- ref_count_delete_row);
- g_test_add_func ("/TreeModelSort/ref-count/cleanup",
- ref_count_cleanup);
- g_test_add_func ("/TreeModelSort/ref-count/row-ref",
- ref_count_row_ref);
- g_test_add_func ("/TreeModelSort/ref-count/reorder/single-level",
- ref_count_reorder_single);
- g_test_add_func ("/TreeModelSort/ref-count/reorder/two-levels",
- ref_count_reorder_two);
-
- g_test_add_func ("/TreeModelSort/rows-reordered/single-level",
- rows_reordered_single_level);
- g_test_add_func ("/TreeModelSort/rows-reordered/two-levels",
- rows_reordered_two_levels);
- g_test_add_func ("/TreeModelSort/sorted-insert",
- sorted_insert);
-
- g_test_add_func ("/TreeModelSort/specific/bug-300089",
- specific_bug_300089);
- g_test_add_func ("/TreeModelSort/specific/bug-364946",
- specific_bug_364946);
- g_test_add_func ("/TreeModelSort/specific/bug-674587",
- specific_bug_674587);
- g_test_add_func ("/TreeModelSort/specific/bug-698846",
- specific_bug_698846);
-}
-
diff --git a/gtk/tests/stylecontext.c b/gtk/tests/stylecontext.c
deleted file mode 100644
index 3435ce41a1..0000000000
--- a/gtk/tests/stylecontext.c
+++ /dev/null
@@ -1,359 +0,0 @@
-#include <gtk/gtk.h>
-
-static void
-test_parse_selectors (void)
-{
- GtkCssProvider *provider;
- GError *error;
- gboolean res;
- gint i;
- const gchar *valid[] = {
- "* {}",
- "E {}",
- "E F {}",
- "E > F {}",
- "E#id {}",
- "#id {}",
- "tab:first-child {}",
- "tab:last-child {}",
- "tab:nth-child(first) {}",
- "tab:nth-child(last) {}",
- "tab:nth-child(even) {}",
- "tab:nth-child(odd) {}",
- "tab:sorted {}",
- ".some-class {}",
- ".some-class.another-class {}",
- ".some-class .another-class {}",
- "E * {}",
- "E .class {}",
- "E > .foo {}",
- "E > #id {}",
- "E:active {}",
- "E:prelight {}",
- "E:hover {}",
- "E:selected {}",
- "E:insensitive {}",
- "E:inconsistent {}",
- "E:focused {}",
- "E:active:prelight {}",
- "* > .notebook tab:first-child .label:focused {}",
- "E, F {}",
- "E, F /* comment here */ {}",
- "E,/* comment here */ F {}",
- "E1.e1_2 #T3_4 {}",
- "E:first-child {}",
- "E:last-child {}",
- "E:nth-child(first) {}",
- "E:nth-child(last) {}",
- "E:nth-child(even) {}",
- "E:nth-child(odd) {}",
- "E:sorted {}",
- "E:focused tab {}",
- NULL
- };
-
- error = NULL;
- for (i = 0; valid[i]; i++)
- {
- provider = gtk_css_provider_new ();
- res = gtk_css_provider_load_from_data (provider, valid[i], -1, &error);
- if (error)
- g_print ("parsing '%s': got unexpected error: %s\n", valid[i], error->message);
- g_assert_no_error (error);
- g_assert (res);
-
- g_object_unref (provider);
- }
-}
-
-static void
-test_path (void)
-{
- GtkWidgetPath *path;
- GtkWidgetPath *path2;
- gint pos;
- GtkRegionFlags flags;
-
- path = gtk_widget_path_new ();
- g_assert_cmpint (gtk_widget_path_length (path), ==, 0);
-
- pos = gtk_widget_path_append_type (path, GTK_TYPE_WINDOW);
- g_assert_cmpint (pos, ==, 0);
- g_assert_cmpint (gtk_widget_path_length (path), ==, 1);
- g_assert (gtk_widget_path_iter_get_object_type (path, 0) == GTK_TYPE_WINDOW);
- g_assert (gtk_widget_path_is_type (path, GTK_TYPE_WIDGET));
- g_assert (gtk_widget_path_iter_get_name (path, 0) == NULL);
-
- pos = gtk_widget_path_append_type (path, GTK_TYPE_WIDGET);
- g_assert_cmpint (pos, ==, 1);
- g_assert_cmpint (gtk_widget_path_length (path), ==, 2);
- gtk_widget_path_iter_set_object_type (path, pos, GTK_TYPE_BUTTON);
- g_assert (gtk_widget_path_is_type (path, GTK_TYPE_BUTTON));
- g_assert (gtk_widget_path_has_parent (path, GTK_TYPE_WIDGET));
- g_assert (gtk_widget_path_has_parent (path, GTK_TYPE_WINDOW));
- g_assert (!gtk_widget_path_has_parent (path, GTK_TYPE_DIALOG));
- g_assert (gtk_widget_path_iter_get_name (path, 1) == NULL);
-
- gtk_widget_path_iter_set_name (path, 1, "name");
- g_assert (gtk_widget_path_iter_has_name (path, 1, "name"));
-
- gtk_widget_path_iter_add_class (path, 1, "class1");
- gtk_widget_path_iter_add_class (path, 1, "class2");
- g_assert (gtk_widget_path_iter_has_class (path, 1, "class1"));
- g_assert (gtk_widget_path_iter_has_class (path, 1, "class2"));
- g_assert (!gtk_widget_path_iter_has_class (path, 1, "class3"));
-
- path2 = gtk_widget_path_copy (path);
- g_assert (gtk_widget_path_iter_has_class (path2, 1, "class1"));
- g_assert (gtk_widget_path_iter_has_class (path2, 1, "class2"));
- g_assert (!gtk_widget_path_iter_has_class (path2, 1, "class3"));
- gtk_widget_path_free (path2);
-
- gtk_widget_path_iter_remove_class (path, 1, "class2");
- g_assert (gtk_widget_path_iter_has_class (path, 1, "class1"));
- g_assert (!gtk_widget_path_iter_has_class (path, 1, "class2"));
- gtk_widget_path_iter_clear_classes (path, 1);
- g_assert (!gtk_widget_path_iter_has_class (path, 1, "class1"));
-
- gtk_widget_path_iter_add_region (path, 1, "tab", 0);
- gtk_widget_path_iter_add_region (path, 1, "title", GTK_REGION_EVEN | GTK_REGION_FIRST);
-
- g_assert (gtk_widget_path_iter_has_region (path, 1, "tab", &flags) &&
- flags == 0);
- g_assert (gtk_widget_path_iter_has_region (path, 1, "title", &flags) &&
- flags == (GTK_REGION_EVEN | GTK_REGION_FIRST));
- g_assert (!gtk_widget_path_iter_has_region (path, 1, "extension", NULL));
-
- path2 = gtk_widget_path_copy (path);
- g_assert (gtk_widget_path_iter_has_region (path2, 1, "tab", &flags) &&
- flags == 0);
- g_assert (gtk_widget_path_iter_has_region (path2, 1, "title", &flags) &&
- flags == (GTK_REGION_EVEN | GTK_REGION_FIRST));
- g_assert (!gtk_widget_path_iter_has_region (path2, 1, "extension", NULL));
- gtk_widget_path_free (path2);
-
- gtk_widget_path_free (path);
-}
-
-static void
-test_match (void)
-{
- GtkStyleContext *context;
- GtkWidgetPath *path;
- GtkCssProvider *provider;
- GError *error;
- const gchar *data;
- GdkRGBA color;
- GdkRGBA expected;
-
- error = NULL;
- provider = gtk_css_provider_new ();
-
- gdk_rgba_parse (&expected, "#fff");
-
- context = gtk_style_context_new ();
-
- path = gtk_widget_path_new ();
- gtk_widget_path_append_type (path, GTK_TYPE_WINDOW);
- gtk_widget_path_append_type (path, GTK_TYPE_BOX);
- gtk_widget_path_append_type (path, GTK_TYPE_BUTTON);
- gtk_widget_path_iter_set_name (path, 0, "mywindow");
- gtk_widget_path_iter_add_class (path, 2, "button");
- gtk_style_context_set_path (context, path);
- gtk_widget_path_free (path);
-
- gtk_style_context_add_provider (context,
- GTK_STYLE_PROVIDER (provider),
- GTK_STYLE_PROVIDER_PRIORITY_USER);
-
- data = "* { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- "GtkButton { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- "GtkButton { color: #fff }\n"
- "GtkWindow > GtkButton { color: #000 }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- ".button { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- "GtkButton { color: #000 }\n"
- ".button { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- "GtkButton { color: #000 }\n"
- "GtkWindow GtkButton { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- ".button { color: #000 }\n"
- "GtkWindow .button { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- "* .button { color: #000 }\n"
- "#mywindow .button { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- "GtkWindow .button { color: #000 }\n"
- "GtkWindow#mywindow .button { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- data = "* { color: #f00 }\n"
- "GtkWindow .button { color: #000 }\n"
- "GObject .button { color: #fff }";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_invalidate (context);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color);
- g_assert (gdk_rgba_equal (&color, &expected));
-
- g_object_unref (provider);
- g_object_unref (context);
-}
-
-static void
-test_style_property (void)
-{
- GtkStyleContext *context;
- GtkWidgetPath *path;
- GtkCssProvider *provider;
- GError *error;
- const gchar *data;
- gint x;
- GdkRGBA color;
- GdkRGBA expected;
-
- error = NULL;
- provider = gtk_css_provider_new ();
-
- context = gtk_style_context_new ();
-
- path = gtk_widget_path_new ();
- gtk_widget_path_append_type (path, GTK_TYPE_WINDOW);
- gtk_widget_path_append_type (path, GTK_TYPE_BOX);
- gtk_widget_path_append_type (path, GTK_TYPE_BUTTON);
- gtk_style_context_set_path (context, path);
- gtk_widget_path_free (path);
- gtk_style_context_set_state (context, GTK_STATE_FLAG_PRELIGHT);
-
- /* Since we set the prelight state on the context, we expect
- * only the third selector to match, even though the second one
- * has higher specificity, and the fourth one comes later.
- *
- * In particular, we want to verify that widget style properties and
- * CSS properties follow the same matching rules, ie we expect
- * color to be #003 and child-displacement-x to be 3.
- */
- data = "GtkButton:insensitive { color: #001; -GtkButton-child-displacement-x: 1 }\n"
- "GtkBox GtkButton:selected { color: #002; -GtkButton-child-displacement-x: 2 }\n"
- "GtkButton:prelight { color: #003; -GtkButton-child-displacement-x: 3 }\n"
- "GtkButton:focused { color: #004; -GtkButton-child-displacement-x: 4 }\n";
- gtk_css_provider_load_from_data (provider, data, -1, &error);
- g_assert_no_error (error);
- gtk_style_context_add_provider (context,
- GTK_STYLE_PROVIDER (provider),
- GTK_STYLE_PROVIDER_PRIORITY_USER);
-
- gtk_style_context_invalidate (context);
-
- gtk_style_context_get_color (context, GTK_STATE_FLAG_PRELIGHT, &color);
- gdk_rgba_parse (&expected, "#003");
- g_assert (gdk_rgba_equal (&color, &expected));
-
- gtk_style_context_get_style (context, "child-displacement-x", &x, NULL);
-
- g_assert_cmpint (x, ==, 3);
-
- g_object_unref (provider);
- g_object_unref (context);
-}
-
-static void
-test_basic_properties (void)
-{
- GtkStyleContext *context;
- GtkWidgetPath *path;
- GdkRGBA *color;
- GdkRGBA *bg_color;
- PangoFontDescription *font;
-
- context = gtk_style_context_new ();
- path = gtk_widget_path_new ();
- gtk_style_context_set_path (context, path);
- gtk_widget_path_free (path);
-
- gtk_style_context_get (context, 0,
- "color", &color,
- "background-color", &bg_color,
- "font", &font,
- NULL);
- g_assert (color != NULL);
- g_assert (bg_color != NULL);
- g_assert (font != NULL);
-
- gdk_rgba_free (color);
- gdk_rgba_free (bg_color);
- pango_font_description_free (font);
-
- g_object_unref (context);
-}
-
-int
-main (int argc, char *argv[])
-{
- gtk_init (NULL, NULL);
- g_test_init (&argc, &argv, NULL);
-
- g_test_add_func ("/style/parse/selectors", test_parse_selectors);
- g_test_add_func ("/style/path", test_path);
- g_test_add_func ("/style/match", test_match);
- g_test_add_func ("/style/style-property", test_style_property);
- g_test_add_func ("/style/basic", test_basic_properties);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/templates.c b/gtk/tests/templates.c
deleted file mode 100644
index 32c1e68080..0000000000
--- a/gtk/tests/templates.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/* templates.c
- * Copyright (C) 2013 Openismus GmbH
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors: Tristan Van Berkom <tristanvb@openismus.com>
- */
-#include <gtk/gtk.h>
-
-#ifdef HAVE_UNIX_PRINT_WIDGETS
-# include <gtk/gtkunixprint.h>
-#endif
-
-static gboolean
-main_loop_quit_cb (gpointer data)
-{
- gtk_main_quit ();
-
- return FALSE;
-}
-
-static void
-test_dialog_basic (void)
-{
- GtkWidget *dialog;
-
- dialog = gtk_dialog_new();
- g_assert (GTK_IS_DIALOG (dialog));
- g_assert (gtk_dialog_get_action_area (GTK_DIALOG (dialog)) != NULL);
- g_assert (gtk_dialog_get_content_area (GTK_DIALOG (dialog)) != NULL);
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-test_dialog_override_property (void)
-{
- GtkWidget *dialog;
-
- dialog = g_object_new (GTK_TYPE_DIALOG,
- "type-hint", GDK_WINDOW_TYPE_HINT_UTILITY,
- NULL);
- g_assert (GTK_IS_DIALOG (dialog));
- g_assert (gtk_window_get_type_hint (GTK_WINDOW (dialog)) == GDK_WINDOW_TYPE_HINT_UTILITY);
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-test_message_dialog_basic (void)
-{
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_CLOSE,
- "Do it hard !");
- g_assert (GTK_IS_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-}
-
-static void
-test_about_dialog_basic (void)
-{
- GtkWidget *dialog;
-
- dialog = gtk_about_dialog_new ();
- g_assert (GTK_IS_ABOUT_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-}
-
-static void
-test_info_bar_basic (void)
-{
- GtkWidget *infobar;
-
- infobar = gtk_info_bar_new ();
- g_assert (GTK_IS_INFO_BAR (infobar));
- gtk_widget_destroy (infobar);
-}
-
-static void
-test_lock_button_basic (void)
-{
- GtkWidget *button;
- GPermission *permission;
-
- permission = g_simple_permission_new (TRUE);
- button = gtk_lock_button_new (permission);
- g_assert (GTK_IS_LOCK_BUTTON (button));
- gtk_widget_destroy (button);
- g_object_unref (permission);
-}
-
-static void
-test_assistant_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_assistant_new ();
- g_assert (GTK_IS_ASSISTANT (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_scale_button_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_scale_button_new (GTK_ICON_SIZE_MENU,
- 0, 100, 10, NULL);
- g_assert (GTK_IS_SCALE_BUTTON (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_volume_button_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_volume_button_new ();
- g_assert (GTK_IS_VOLUME_BUTTON (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_statusbar_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_statusbar_new ();
- g_assert (GTK_IS_STATUSBAR (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_app_chooser_widget_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_app_chooser_widget_new (NULL);
- g_assert (GTK_IS_APP_CHOOSER_WIDGET (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_app_chooser_dialog_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_app_chooser_dialog_new_for_content_type (NULL, 0, "text/plain");
- g_assert (GTK_IS_APP_CHOOSER_DIALOG (widget));
-
- /* GtkAppChooserDialog bug, if destroyed before spinning
- * the main context then app_chooser_online_get_default_ready_cb()
- * will be eventually called and segfault.
- */
- g_timeout_add (500, main_loop_quit_cb, NULL);
- gtk_main();
- gtk_widget_destroy (widget);
-}
-
-static void
-test_color_chooser_dialog_basic (void)
-{
- GtkWidget *widget;
-
- /* This test also tests the internal GtkColorEditor widget */
- widget = gtk_color_chooser_dialog_new (NULL, NULL);
- g_assert (GTK_IS_COLOR_CHOOSER_DIALOG (widget));
- gtk_widget_destroy (widget);
-}
-
-/* Avoid warnings from GVFS-RemoteVolumeMonitor */
-static gboolean
-ignore_gvfs_warning (const gchar *log_domain,
- GLogLevelFlags log_level,
- const gchar *message,
- gpointer user_data)
-{
- if (g_strcmp0 (log_domain, "GVFS-RemoteVolumeMonitor") == 0)
- return FALSE;
-
- return TRUE;
-}
-
-static void
-test_file_chooser_widget_basic (void)
-{
- GtkWidget *widget;
-
- /* This test also tests the internal GtkPathBar widget */
- g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
-
- widget = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
- g_assert (GTK_IS_FILE_CHOOSER_WIDGET (widget));
-
- /* XXX BUG:
- *
- * Spin the mainloop for a bit, this allows the file operations
- * to complete, GtkFileChooserDefault has a bug where it leaks
- * GtkTreeRowReferences to the internal shortcuts_model
- *
- * Since we assert all automated children are finalized we
- * can catch this
- */
- g_timeout_add (100, main_loop_quit_cb, NULL);
- gtk_main();
-
- gtk_widget_destroy (widget);
-}
-
-static void
-test_file_chooser_dialog_basic (void)
-{
- GtkWidget *widget;
-
- g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
-
- widget = gtk_file_chooser_dialog_new ("The Dialog", NULL,
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
-
- g_assert (GTK_IS_FILE_CHOOSER_DIALOG (widget));
- g_timeout_add (100, main_loop_quit_cb, NULL);
- gtk_main();
-
- gtk_widget_destroy (widget);
-}
-
-static void
-test_file_chooser_button_basic (void)
-{
- GtkWidget *widget;
-
- g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
-
- widget = gtk_file_chooser_button_new ("Choose a file !", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
- g_assert (GTK_IS_FILE_CHOOSER_BUTTON (widget));
- g_timeout_add (100, main_loop_quit_cb, NULL);
- gtk_main();
-
- gtk_widget_destroy (widget);
-}
-
-static void
-test_font_button_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_font_button_new ();
- g_assert (GTK_IS_FONT_BUTTON (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_font_chooser_widget_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_font_chooser_widget_new ();
- g_assert (GTK_IS_FONT_CHOOSER_WIDGET (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_font_chooser_dialog_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_font_chooser_dialog_new ("Choose a font !", NULL);
- g_assert (GTK_IS_FONT_CHOOSER_DIALOG (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_recent_chooser_widget_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_recent_chooser_widget_new ();
- g_assert (GTK_IS_RECENT_CHOOSER_WIDGET (widget));
- gtk_widget_destroy (widget);
-}
-
-#ifdef HAVE_UNIX_PRINT_WIDGETS
-static void
-test_page_setup_unix_dialog_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_page_setup_unix_dialog_new ("Setup your Page !", NULL);
- g_assert (GTK_IS_PAGE_SETUP_UNIX_DIALOG (widget));
- gtk_widget_destroy (widget);
-}
-
-static void
-test_print_unix_dialog_basic (void)
-{
- GtkWidget *widget;
-
- widget = gtk_print_unix_dialog_new ("Go Print !", NULL);
- g_assert (GTK_IS_PRINT_UNIX_DIALOG (widget));
- gtk_widget_destroy (widget);
-}
-#endif
-
-int
-main (int argc, char **argv)
-{
- /* initialize test program */
- gtk_test_init (&argc, &argv);
-
- /* This environment variable cooperates with gtk_widget_destroy()
- * to assert that all automated compoenents are properly finalized
- * when a given composite widget is destroyed.
- */
- g_assert (g_setenv ("GTK_WIDGET_ASSERT_COMPONENTS", "1", TRUE));
-
- g_test_add_func ("/Template/GtkDialog/Basic", test_dialog_basic);
- g_test_add_func ("/Template/GtkDialog/OverrideProperty", test_dialog_override_property);
- g_test_add_func ("/Template/GtkMessageDialog/Basic", test_message_dialog_basic);
- g_test_add_func ("/Template/GtkAboutDialog/Basic", test_about_dialog_basic);
- g_test_add_func ("/Template/GtkInfoBar/Basic", test_info_bar_basic);
- g_test_add_func ("/Template/GtkLockButton/Basic", test_lock_button_basic);
- g_test_add_func ("/Template/GtkAssistant/Basic", test_assistant_basic);
- g_test_add_func ("/Template/GtkScaleButton/Basic", test_scale_button_basic);
- g_test_add_func ("/Template/GtkVolumeButton/Basic", test_volume_button_basic);
- g_test_add_func ("/Template/GtkStatusBar/Basic", test_statusbar_basic);
- g_test_add_func ("/Template/GtkAppChooserWidget/Basic", test_app_chooser_widget_basic);
- g_test_add_func ("/Template/GtkAppChooserDialog/Basic", test_app_chooser_dialog_basic);
- g_test_add_func ("/Template/GtkColorChooserDialog/Basic", test_color_chooser_dialog_basic);
- g_test_add_func ("/Template/GtkFileChooserWidget/Basic", test_file_chooser_widget_basic);
- g_test_add_func ("/Template/GtkFileChooserDialog/Basic", test_file_chooser_dialog_basic);
- g_test_add_func ("/Template/GtkFileChooserButton/Basic", test_file_chooser_button_basic);
- g_test_add_func ("/Template/GtkFontButton/Basic", test_font_button_basic);
- g_test_add_func ("/Template/GtkFontChooserWidget/Basic", test_font_chooser_widget_basic);
- g_test_add_func ("/Template/GtkFontChooserDialog/Basic", test_font_chooser_dialog_basic);
- g_test_add_func ("/Template/GtkRecentChooserWidget/Basic", test_recent_chooser_widget_basic);
-
-#ifdef HAVE_UNIX_PRINT_WIDGETS
- g_test_add_func ("/Template/UnixPrint/GtkPageSetupUnixDialog/Basic", test_page_setup_unix_dialog_basic);
- g_test_add_func ("/Template/UnixPrint/GtkPrintUnixDialog/Basic", test_print_unix_dialog_basic);
-#endif
-
- return g_test_run();
-}
diff --git a/gtk/tests/testing.c b/gtk/tests/testing.c
deleted file mode 100644
index ed67615ae4..0000000000
--- a/gtk/tests/testing.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* Gtk+ testing utilities
- * Copyright (C) 2007 Imendio AB
- * Authors: Tim Janik
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <string.h>
-#include <math.h>
-
-/* Use a keyval that requires Shift to be active (in typical layouts)
- * like GDK_KEY_ampersand, which is '<shift>6'
- */
-#define KEYVAL_THAT_REQUIRES_SHIFT GDK_KEY_ampersand
-
-
-/* --- test functions --- */
-static void
-test_button_clicks (void)
-{
- int a = 0, b = 0, c = 0;
- GtkWidget *window = gtk_test_display_button_window ("Test Window",
- "Test: gtk_test_widget_click",
- "IgnoreMe1", &a,
- "ClickMe", &b,
- "IgnoreMe2", &c,
- NULL);
- GtkWidget *button = gtk_test_find_widget (window, "*Click*", GTK_TYPE_BUTTON);
- gboolean simsuccess;
- g_assert (button != NULL);
- simsuccess = gtk_test_widget_click (button, 1, 0);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ())
- gtk_main_iteration ();
- g_assert (a == 0);
- g_assert (b > 0);
- g_assert (c == 0);
-}
-
-static void
-test_button_keys (void)
-{
- int a = 0, b = 0, c = 0;
- GtkWidget *window = gtk_test_display_button_window ("Test Window",
- "Test: gtk_test_widget_send_key",
- "IgnoreMe1", &a,
- "ClickMe", &b,
- "IgnoreMe2", &c,
- NULL);
- GtkWidget *button = gtk_test_find_widget (window, "*Click*", GTK_TYPE_BUTTON);
- gboolean simsuccess;
- g_assert (button != NULL);
- gtk_widget_grab_focus (button);
- g_assert (gtk_widget_has_focus (button));
- simsuccess = gtk_test_widget_send_key (button, GDK_KEY_Return, 0);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ())
- gtk_main_iteration ();
- g_assert (a == 0);
- g_assert (b > 0);
- g_assert (c == 0);
-}
-
-static gboolean
-store_last_key_release (GtkWidget *widget,
- GdkEventKey *event,
- gpointer user_data)
-{
- *((gint *)user_data) = event->keyval;
- return FALSE;
-}
-
-static void
-test_send_shift_key (void)
-{
- GtkWidget *window = gtk_test_display_button_window ("Test Window",
- "Test: test_send_shift_key()",
- "IgnoreMe1", NULL,
- "SendMeKeys", NULL,
- "IgnoreMe2", NULL,
- NULL);
- GtkWidget *button = gtk_test_find_widget (window, "SendMeKeys", GTK_TYPE_BUTTON);
- gint last_key_release = 0;
- gboolean simsuccess;
- g_assert (button != NULL);
- g_signal_connect (button, "key-release-event",
- G_CALLBACK (store_last_key_release),
- &last_key_release);
- gtk_widget_grab_focus (button);
- g_assert (gtk_widget_has_focus (button));
- simsuccess = gtk_test_widget_send_key (button, KEYVAL_THAT_REQUIRES_SHIFT, 0 /*modifiers*/);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ())
- gtk_main_iteration ();
- g_assert_cmpint (KEYVAL_THAT_REQUIRES_SHIFT, ==, last_key_release);
-}
-
-static void
-test_slider_ranges (void)
-{
- GtkWidget *child;
- GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test: gtk_test_warp_slider");
- GtkWidget *hscale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
- -50, +50, 5);
-
- child = gtk_bin_get_child (GTK_BIN (window));
- gtk_container_add (GTK_CONTAINER (child), hscale);
- gtk_widget_show (hscale);
- gtk_widget_show_now (window);
- while (gtk_events_pending ())
- gtk_main_iteration ();
- gtk_test_slider_set_perc (hscale, 0.0);
- while (gtk_events_pending ())
- gtk_main_iteration ();
- g_assert (gtk_test_slider_get_value (hscale) == -50);
- gtk_test_slider_set_perc (hscale, 50.0);
- while (gtk_events_pending ())
- gtk_main_iteration ();
- g_assert (fabs (gtk_test_slider_get_value (hscale)) < 0.0001);
- gtk_test_slider_set_perc (hscale, 100.0);
- while (gtk_events_pending ())
- gtk_main_iteration ();
- g_assert (gtk_test_slider_get_value (hscale) == +50.0);
-}
-
-static void
-test_text_access (void)
-{
- const int N_WIDGETS = 3;
- GtkWidget *widgets[N_WIDGETS];
- int i = 0;
- widgets[i++] = gtk_test_create_widget (GTK_TYPE_LABEL, NULL);
- widgets[i++] = gtk_test_create_widget (GTK_TYPE_ENTRY, NULL);
- widgets[i++] = gtk_test_create_widget (GTK_TYPE_TEXT_VIEW, NULL);
- g_assert (i == N_WIDGETS);
- for (i = 0; i < N_WIDGETS; i++)
- gtk_test_text_set (widgets[i], "foobar");
- for (i = 0; i < N_WIDGETS; i++)
- {
- gchar *text = gtk_test_text_get (widgets[i]);
- g_assert (strcmp (text, "foobar") == 0);
- g_free (text);
- }
- for (i = 0; i < N_WIDGETS; i++)
- gtk_test_text_set (widgets[i], "");
- for (i = 0; i < N_WIDGETS; i++)
- {
- gchar *text = gtk_test_text_get (widgets[i]);
- g_assert (strcmp (text, "") == 0);
- g_free (text);
- }
-}
-
-static void
-test_xserver_sync (void)
-{
- GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test: test_xserver_sync");
- GtkWidget *darea = gtk_drawing_area_new ();
- GtkWidget *child;
- GdkWindow *gdk_window;
- GTimer *gtimer = g_timer_new();
- gint sync_is_slower = 0, repeat = 5;
-
- child = gtk_bin_get_child (GTK_BIN (window));
- //gdk_window = gtk_widget_get_window (darea);
-
- gtk_widget_set_size_request (darea, 320, 200);
- gtk_container_add (GTK_CONTAINER (child), darea);
- gtk_widget_show (darea);
- gtk_widget_show_now (window);
-
- while (repeat--)
- {
- gint i, many = 200;
- double nosync_time, sync_time;
- cairo_t *cr;
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
- gdk_window = gtk_widget_get_window (darea);
- cr = gdk_cairo_create (gdk_window);
- cairo_set_source_rgba (cr, 0, 1, 0, 0.1);
- /* run a number of consecutive drawing requests, just using drawing queue */
- g_timer_start (gtimer);
- for (i = 0; i < many; i++)
- {
- cairo_paint (cr);
- }
- g_timer_stop (gtimer);
- nosync_time = g_timer_elapsed (gtimer, NULL);
- gdk_flush();
- while (gtk_events_pending ())
- gtk_main_iteration ();
- g_timer_start (gtimer);
- /* run a number of consecutive drawing requests with intermediate drawing syncs */
- for (i = 0; i < many; i++)
- {
- cairo_paint (cr);
- gdk_test_render_sync (gdk_window);
- }
- g_timer_stop (gtimer);
- sync_time = g_timer_elapsed (gtimer, NULL);
- sync_is_slower += sync_time > nosync_time * 1.5;
- }
- g_timer_destroy (gtimer);
- g_assert (sync_is_slower > 0);
-}
-
-static void
-test_spin_button_arrows (void)
-{
- GtkWidget *child;
- GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test: test_spin_button_arrows");
- GtkWidget *spinner = gtk_spin_button_new_with_range (0, 100, 5);
- gboolean simsuccess;
- double oldval, newval;
-
- gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE);
-
- child = gtk_bin_get_child (GTK_BIN (window));
- gtk_container_add (GTK_CONTAINER (child), spinner);
- gtk_widget_show (spinner);
- gtk_widget_show_now (window);
- gtk_test_slider_set_perc (spinner, 0);
- /* check initial spinner value */
- oldval = gtk_test_slider_get_value (spinner);
- g_assert (oldval == 0);
- /* check simple increment */
- simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 1, TRUE);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
- gtk_main_iteration ();
- newval = gtk_test_slider_get_value (spinner);
- g_assert (newval > oldval);
- /* check maximum warp */
- simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 3, TRUE);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
- gtk_main_iteration ();
- oldval = gtk_test_slider_get_value (spinner);
- g_assert (oldval == 100);
- /* check simple decrement */
- oldval = gtk_test_slider_get_value (spinner);
- simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 1, FALSE);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
- gtk_main_iteration ();
- newval = gtk_test_slider_get_value (spinner);
- g_assert (newval < oldval);
- /* check minimum warp */
- simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 3, FALSE);
- g_assert (simsuccess == TRUE);
- while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
- gtk_main_iteration ();
- oldval = gtk_test_slider_get_value (spinner);
- g_assert (oldval == 0);
-}
-
-static void
-test_statusbar_remove_all (void)
-{
- GtkWidget *statusbar;
-
- g_test_bug ("640487");
-
- statusbar = gtk_statusbar_new ();
- g_object_ref_sink (statusbar);
-
- gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla");
- gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla");
- gtk_statusbar_remove_all (GTK_STATUSBAR (statusbar), 1);
-
- g_object_unref (statusbar);
-}
-
-int
-main (int argc,
- char *argv[])
-{
- gtk_test_init (&argc, &argv);
- g_test_bug_base ("http://bugzilla.gnome.org/");
- gtk_test_register_all_types();
-
- g_test_add_func ("/tests/statusbar-remove-all", test_statusbar_remove_all);
- g_test_add_func ("/ui-tests/text-access", test_text_access);
- g_test_add_func ("/ui-tests/button-clicks", test_button_clicks);
- g_test_add_func ("/ui-tests/keys-events", test_button_keys);
- g_test_add_func ("/ui-tests/send-shift-key", test_send_shift_key);
- g_test_add_func ("/ui-tests/slider-ranges", test_slider_ranges);
- g_test_add_func ("/ui-tests/xserver-sync", test_xserver_sync);
- g_test_add_func ("/ui-tests/spin-button-arrows", test_spin_button_arrows);
-
- return g_test_run();
-}
diff --git a/gtk/tests/textbuffer.c b/gtk/tests/textbuffer.c
deleted file mode 100644
index e26a5ddfa8..0000000000
--- a/gtk/tests/textbuffer.c
+++ /dev/null
@@ -1,1341 +0,0 @@
-/* testtextbuffer.c -- Simplistic test suite
- * Copyright (C) 2000 Red Hat, Inc
- * Author: Havoc Pennington
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-#include <stdio.h>
-#include <string.h>
-
-#include <gtk/gtk.h>
-#include "gtk/gtktexttypes.h" /* Private header, for UNKNOWN_CHAR */
-
-static void
-gtk_text_iter_spew (const GtkTextIter *iter, const gchar *desc)
-{
- g_print (" %20s: line %d / char %d / line char %d / line byte %d\n",
- desc,
- gtk_text_iter_get_line (iter),
- gtk_text_iter_get_offset (iter),
- gtk_text_iter_get_line_offset (iter),
- gtk_text_iter_get_line_index (iter));
-}
-
-static void
-check_get_set_text (GtkTextBuffer *buffer,
- const char *str)
-{
- GtkTextIter start, end, iter;
- char *text;
- int n;
-
- gtk_text_buffer_set_text (buffer, str, -1);
- if (gtk_text_buffer_get_char_count (buffer) != g_utf8_strlen (str, -1))
- g_error ("Wrong number of chars (%d not %d)",
- gtk_text_buffer_get_char_count (buffer),
- (int) g_utf8_strlen (str, -1));
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
- if (strcmp (text, str) != 0)
- g_error ("Got '%s' as buffer contents", text);
- g_free (text);
-
- /* line char counts */
- iter = start;
- n = 0;
- do
- {
- n += gtk_text_iter_get_chars_in_line (&iter);
- }
- while (gtk_text_iter_forward_line (&iter));
-
- if (n != gtk_text_buffer_get_char_count (buffer))
- g_error ("Sum of chars in lines is %d but buffer char count is %d",
- n, gtk_text_buffer_get_char_count (buffer));
-
- /* line byte counts */
- iter = start;
- n = 0;
- do
- {
- n += gtk_text_iter_get_bytes_in_line (&iter);
- }
- while (gtk_text_iter_forward_line (&iter));
-
- if (n != strlen (str))
- g_error ("Sum of chars in lines is %d but buffer byte count is %d",
- n, (int) strlen (str));
-
- gtk_text_buffer_set_text (buffer, "", -1);
-
- n = gtk_text_buffer_get_line_count (buffer);
- if (n != 1)
- g_error ("%d lines, expected 1", n);
-
- n = gtk_text_buffer_get_char_count (buffer);
- if (n != 0)
- g_error ("%d chars, expected 0", n);
-}
-
-static gint
-count_toggles_at_iter (GtkTextIter *iter,
- GtkTextTag *of_tag)
-{
- GSList *tags;
- GSList *tmp;
- gint count = 0;
-
- /* get toggle-ons and toggle-offs */
- tags = gtk_text_iter_get_toggled_tags (iter, TRUE);
- tags = g_slist_concat (tags,
- gtk_text_iter_get_toggled_tags (iter, FALSE));
-
- tmp = tags;
- while (tmp != NULL)
- {
- if (of_tag == NULL)
- ++count;
- else if (of_tag == tmp->data)
- ++count;
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (tags);
-
- return count;
-}
-
-static gint
-count_toggles_in_range_by_char (GtkTextBuffer *buffer,
- GtkTextTag *of_tag,
- const GtkTextIter *start,
- const GtkTextIter *end)
-{
- GtkTextIter iter;
- gint count = 0;
-
- iter = *start;
- do
- {
- count += count_toggles_at_iter (&iter, of_tag);
- if (!gtk_text_iter_forward_char (&iter))
- {
- /* end iterator */
- count += count_toggles_at_iter (&iter, of_tag);
- break;
- }
- }
- while (gtk_text_iter_compare (&iter, end) <= 0);
-
- return count;
-}
-
-static gint
-count_toggles_in_buffer (GtkTextBuffer *buffer,
- GtkTextTag *of_tag)
-{
- GtkTextIter start, end;
-
- gtk_text_buffer_get_bounds (buffer, &start, &end);
-
- return count_toggles_in_range_by_char (buffer, of_tag, &start, &end);
-}
-
-static void
-check_specific_tag_in_range (GtkTextBuffer *buffer,
- const gchar *tag_name,
- const GtkTextIter *start,
- const GtkTextIter *end)
-{
- GtkTextIter iter;
- GtkTextTag *tag;
- gboolean state;
- gint count;
- gint buffer_count;
- gint last_offset;
-
- if (gtk_text_iter_compare (start, end) > 0)
- {
- g_print (" (inverted range for checking tags, skipping)\n");
- return;
- }
-
- tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table (buffer),
- tag_name);
-
- buffer_count = count_toggles_in_range_by_char (buffer, tag, start, end);
-
- state = FALSE;
- count = 0;
-
- last_offset = -1;
- iter = *start;
- if (gtk_text_iter_toggles_tag (&iter, tag) ||
- gtk_text_iter_forward_to_tag_toggle (&iter, tag))
- {
- do
- {
- gint this_offset;
-
- ++count;
-
- this_offset = gtk_text_iter_get_offset (&iter);
-
- if (this_offset <= last_offset)
- g_error ("forward_to_tag_toggle moved in wrong direction");
-
- last_offset = this_offset;
-
- if (gtk_text_iter_begins_tag (&iter, tag))
- {
- if (state)
- g_error ("Tag %p is already on, and was toggled on?", tag);
- state = TRUE;
- }
- else if (gtk_text_iter_ends_tag (&iter, tag))
- {
- if (!state)
- g_error ("Tag %p toggled off, but wasn't toggled on?", tag);
- state = FALSE;
- }
- else
- g_error ("forward_to_tag_toggle went to a location without a toggle");
- }
- while (gtk_text_iter_forward_to_tag_toggle (&iter, tag) &&
- gtk_text_iter_compare (&iter, end) <= 0);
- }
-
- if (count != buffer_count)
- g_error ("Counted %d tags iterating by char, %d iterating forward by tag toggle\n",
- buffer_count, count);
-
- state = FALSE;
- count = 0;
-
- iter = *end;
- last_offset = gtk_text_iter_get_offset (&iter);
- if (gtk_text_iter_toggles_tag (&iter, tag) ||
- gtk_text_iter_backward_to_tag_toggle (&iter, tag))
- {
- do
- {
- gint this_offset;
-
- ++count;
-
- this_offset = gtk_text_iter_get_offset (&iter);
-
- if (this_offset >= last_offset)
- g_error ("backward_to_tag_toggle moved in wrong direction");
-
- last_offset = this_offset;
-
- if (gtk_text_iter_begins_tag (&iter, tag))
- {
- if (!state)
- g_error ("Tag %p wasn't on when we got to the on toggle going backward?", tag);
- state = FALSE;
- }
- else if (gtk_text_iter_ends_tag (&iter, tag))
- {
- if (state)
- g_error ("Tag %p off toggle, but we were already inside a tag?", tag);
- state = TRUE;
- }
- else
- g_error ("backward_to_tag_toggle went to a location without a toggle");
- }
- while (gtk_text_iter_backward_to_tag_toggle (&iter, tag) &&
- gtk_text_iter_compare (&iter, start) >= 0);
- }
-
- if (count != buffer_count)
- g_error ("Counted %d tags iterating by char, %d iterating backward by tag toggle\n",
- buffer_count, count);
-}
-
-static void
-check_specific_tag (GtkTextBuffer *buffer,
- const gchar *tag_name)
-{
- GtkTextIter start, end;
-
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- check_specific_tag_in_range (buffer, tag_name, &start, &end);
- gtk_text_iter_forward_chars (&start, 2);
- gtk_text_iter_backward_chars (&end, 2);
- if (gtk_text_iter_compare (&start, &end) < 0)
- check_specific_tag_in_range (buffer, tag_name, &start, &end);
-}
-
-static void
-run_tests (GtkTextBuffer *buffer)
-{
- GtkTextIter iter;
- GtkTextIter start;
- GtkTextIter end;
- GtkTextIter mark;
- gint i, j;
- gint num_chars;
- GtkTextMark *bar_mark;
- GtkTextTag *tag;
- GHashTable *tag_states;
- gint count;
- gint buffer_count;
-
- gtk_text_buffer_get_bounds (buffer, &start, &end);
-
- /* Check that walking the tree via chars and via iterators produces
- * the same number of indexable locations.
- */
- num_chars = gtk_text_buffer_get_char_count (buffer);
- iter = start;
- bar_mark = gtk_text_buffer_create_mark (buffer, "bar", &iter, FALSE);
- i = 0;
- while (i < num_chars)
- {
- GtkTextIter current;
- GtkTextMark *foo_mark;
-
- gtk_text_buffer_get_iter_at_offset (buffer, &current, i);
-
- if (!gtk_text_iter_equal (&iter, &current))
- {
- g_error ("get_char_index didn't return current iter");
- }
-
- j = gtk_text_iter_get_offset (&iter);
-
- if (i != j)
- {
- g_error ("iter converted to %d not %d", j, i);
- }
-
- /* get/set mark */
- gtk_text_buffer_get_iter_at_mark (buffer, &mark, bar_mark);
-
- if (!gtk_text_iter_equal (&iter, &mark))
- {
- gtk_text_iter_spew (&iter, "iter");
- gtk_text_iter_spew (&mark, "mark");
- g_error ("Mark not moved to the right place.");
- }
-
- foo_mark = gtk_text_buffer_create_mark (buffer, "foo", &iter, FALSE);
- gtk_text_buffer_get_iter_at_mark (buffer, &mark, foo_mark);
- gtk_text_buffer_delete_mark (buffer, foo_mark);
-
- if (!gtk_text_iter_equal (&iter, &mark))
- {
- gtk_text_iter_spew (&iter, "iter");
- gtk_text_iter_spew (&mark, "mark");
- g_error ("Mark not created in the right place.");
- }
-
- if (gtk_text_iter_is_end (&iter))
- g_error ("iterators ran out before chars (offset %d of %d)",
- i, num_chars);
-
- gtk_text_iter_forward_char (&iter);
-
- gtk_text_buffer_move_mark (buffer, bar_mark, &iter);
-
- ++i;
- }
-
- if (!gtk_text_iter_equal (&iter, &end))
- g_error ("Iterating over all chars didn't end with the end iter");
-
- /* Do the tree-walk backward
- */
- num_chars = gtk_text_buffer_get_char_count (buffer);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, -1);
-
- gtk_text_buffer_move_mark (buffer, bar_mark, &iter);
-
- i = num_chars;
-
- if (!gtk_text_iter_equal (&iter, &end))
- g_error ("iter at char -1 is not equal to the end iterator");
-
- while (i >= 0)
- {
- GtkTextIter current;
- GtkTextMark *foo_mark;
-
- gtk_text_buffer_get_iter_at_offset (buffer, &current, i);
-
- if (!gtk_text_iter_equal (&iter, &current))
- {
- g_error ("get_char_index didn't return current iter while going backward");
- }
- j = gtk_text_iter_get_offset (&iter);
-
- if (i != j)
- {
- g_error ("going backward, iter converted to %d not %d", j, i);
- }
-
- /* get/set mark */
- gtk_text_buffer_get_iter_at_mark (buffer, &mark, bar_mark);
-
- if (!gtk_text_iter_equal (&iter, &mark))
- {
- gtk_text_iter_spew (&iter, "iter");
- gtk_text_iter_spew (&mark, "mark");
- g_error ("Mark not moved to the right place.");
- }
-
- foo_mark = gtk_text_buffer_create_mark (buffer, "foo", &iter, FALSE);
- gtk_text_buffer_get_iter_at_mark (buffer, &mark, foo_mark);
- gtk_text_buffer_delete_mark (buffer, foo_mark);
-
- if (!gtk_text_iter_equal (&iter, &mark))
- {
- gtk_text_iter_spew (&iter, "iter");
- gtk_text_iter_spew (&mark, "mark");
- g_error ("Mark not created in the right place.");
- }
-
- if (i > 0)
- {
- if (!gtk_text_iter_backward_char (&iter))
- g_error ("iterators ran out before char indexes");
-
- gtk_text_buffer_move_mark (buffer, bar_mark, &iter);
- }
- else
- {
- if (gtk_text_iter_backward_char (&iter))
- g_error ("went backward from 0?");
- }
-
- --i;
- }
-
- if (!gtk_text_iter_equal (&iter, &start))
- g_error ("Iterating backward over all chars didn't end with the start iter");
-
- /*
- * Check that get_line_count returns the same number of lines
- * as walking the tree by line
- */
- i = 1; /* include current (first) line */
- gtk_text_buffer_get_iter_at_line (buffer, &iter, 0);
- while (gtk_text_iter_forward_line (&iter))
- ++i;
-
- if (i != gtk_text_buffer_get_line_count (buffer))
- g_error ("Counted %d lines, buffer has %d", i,
- gtk_text_buffer_get_line_count (buffer));
-
- /*
- * Check that moving over tag toggles thinks about working.
- */
-
- buffer_count = count_toggles_in_buffer (buffer, NULL);
-
- tag_states = g_hash_table_new (NULL, NULL);
- count = 0;
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
- if (gtk_text_iter_toggles_tag (&iter, NULL) ||
- gtk_text_iter_forward_to_tag_toggle (&iter, NULL))
- {
- do
- {
- GSList *tags;
- GSList *tmp;
- gboolean found_some = FALSE;
-
- /* get toggled-on tags */
- tags = gtk_text_iter_get_toggled_tags (&iter, TRUE);
-
- if (tags)
- found_some = TRUE;
-
- tmp = tags;
- while (tmp != NULL)
- {
- ++count;
-
- tag = tmp->data;
-
- if (g_hash_table_lookup (tag_states, tag))
- g_error ("Tag %p is already on, and was toggled on?", tag);
-
- g_hash_table_insert (tag_states, tag, GINT_TO_POINTER (TRUE));
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (tags);
-
- /* get toggled-off tags */
- tags = gtk_text_iter_get_toggled_tags (&iter, FALSE);
-
- if (tags)
- found_some = TRUE;
-
- tmp = tags;
- while (tmp != NULL)
- {
- ++count;
-
- tag = tmp->data;
-
- if (!g_hash_table_lookup (tag_states, tag))
- g_error ("Tag %p is already off, and was toggled off?", tag);
-
- g_hash_table_remove (tag_states, tag);
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (tags);
-
- if (!found_some)
- g_error ("No tags found going forward to tag toggle.");
-
- }
- while (gtk_text_iter_forward_to_tag_toggle (&iter, NULL));
- }
-
- g_hash_table_destroy (tag_states);
-
- if (count != buffer_count)
- g_error ("Counted %d tags iterating by char, %d iterating by tag toggle\n",
- buffer_count, count);
-
- /* Go backward; here TRUE in the hash means we saw
- * an off toggle last.
- */
-
- tag_states = g_hash_table_new (NULL, NULL);
- count = 0;
-
- gtk_text_buffer_get_end_iter (buffer, &iter);
- if (gtk_text_iter_toggles_tag (&iter, NULL) ||
- gtk_text_iter_backward_to_tag_toggle (&iter, NULL))
- {
- do
- {
- GSList *tags;
- GSList *tmp;
- gboolean found_some = FALSE;
-
- /* get toggled-off tags */
- tags = gtk_text_iter_get_toggled_tags (&iter, FALSE);
-
- if (tags)
- found_some = TRUE;
-
- tmp = tags;
- while (tmp != NULL)
- {
- ++count;
-
- tag = tmp->data;
-
- if (g_hash_table_lookup (tag_states, tag))
- g_error ("Tag %p has two off-toggles in a row?", tag);
-
- g_hash_table_insert (tag_states, tag, GINT_TO_POINTER (TRUE));
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (tags);
-
- /* get toggled-on tags */
- tags = gtk_text_iter_get_toggled_tags (&iter, TRUE);
-
- if (tags)
- found_some = TRUE;
-
- tmp = tags;
- while (tmp != NULL)
- {
- ++count;
-
- tag = tmp->data;
-
- if (!g_hash_table_lookup (tag_states, tag))
- g_error ("Tag %p was toggled on, but saw no off-toggle?", tag);
-
- g_hash_table_remove (tag_states, tag);
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (tags);
-
- if (!found_some)
- g_error ("No tags found going backward to tag toggle.");
- }
- while (gtk_text_iter_backward_to_tag_toggle (&iter, NULL));
- }
-
- g_hash_table_destroy (tag_states);
-
- if (count != buffer_count)
- g_error ("Counted %d tags iterating by char, %d iterating by tag toggle\n",
- buffer_count, count);
-
- check_specific_tag (buffer, "fg_red");
- check_specific_tag (buffer, "bg_green");
- check_specific_tag (buffer, "front_tag");
- check_specific_tag (buffer, "center_tag");
- check_specific_tag (buffer, "end_tag");
-}
-
-
-static const char *book_closed_xpm[] = {
-"16 16 6 1",
-" c None s None",
-". c black",
-"X c red",
-"o c yellow",
-"O c #808080",
-"# c white",
-" ",
-" .. ",
-" ..XX. ",
-" ..XXXXX. ",
-" ..XXXXXXXX. ",
-".ooXXXXXXXXX. ",
-"..ooXXXXXXXXX. ",
-".X.ooXXXXXXXXX. ",
-".XX.ooXXXXXX.. ",
-" .XX.ooXXX..#O ",
-" .XX.oo..##OO. ",
-" .XX..##OO.. ",
-" .X.#OO.. ",
-" ..O.. ",
-" .. ",
-" "};
-
-static void
-fill_buffer (GtkTextBuffer *buffer)
-{
- GtkTextTag *tag;
- GdkColor color, color2;
- GtkTextIter iter;
- GtkTextIter iter2;
- GdkPixbuf *pixbuf;
- int i;
-
- color.red = color.green = 0;
- color.blue = 0xffff;
- color2.red = 0xfff;
- color2.blue = 0x0;
- color2.green = 0;
-
- gtk_text_buffer_create_tag (buffer, "fg_blue",
- "foreground_gdk", &color,
- "background_gdk", &color2,
- "font", "-*-courier-bold-r-*-*-30-*-*-*-*-*-*-*",
- NULL);
-
- color.blue = color.green = 0;
- color.red = 0xffff;
-
- gtk_text_buffer_create_tag (buffer, "fg_red",
- "rise", -4,
- "foreground_gdk", &color,
- NULL);
-
- color.blue = color.red = 0;
- color.green = 0xffff;
-
- gtk_text_buffer_create_tag (buffer, "bg_green",
- "background_gdk", &color,
- "font", "-*-courier-bold-r-*-*-10-*-*-*-*-*-*-*",
- NULL);
-
- pixbuf = gdk_pixbuf_new_from_xpm_data (book_closed_xpm);
-
- g_assert (pixbuf != NULL);
-
- i = 0;
- while (i < 10)
- {
- gchar *str;
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
-
- gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 1);
-
- gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
-
- str = g_strdup_printf ("%d Hello World!\nwoo woo woo woo woo woo woo woo\n",
- i);
-
- gtk_text_buffer_insert (buffer, &iter, str, -1);
-
- g_free (str);
-
- gtk_text_buffer_insert (buffer, &iter,
- "(Hello World!)\nfoo foo Hello this is some text we are using to text word wrap. It has punctuation! gee; blah - hmm, great.\nnew line\n\n"
- /* This is UTF8 stuff, Emacs doesn't
- really know how to display it */
- "Spanish (Espa\303\261ol) \302\241Hola! / French (Fran\303\247ais) Bonjour, Salut / German (Deutsch S\303\274d) Gr\303\274\303\237 Gott (testing Latin-1 chars encoded in UTF8)\nThai (we can't display this, just making sure we don't crash) (\340\270\240\340\270\262\340\270\251\340\270\262\340\271\204\340\270\227\340\270\242) \340\270\252\340\270\247\340\270\261\340\270\252\340\270\224\340\270\265\340\270\204\340\270\243\340\270\261\340\270\232, \340\270\252\340\270\247\340\270\261\340\270\252\340\270\224\340\270\265\340\270\204\340\271\210\340\270\260\n",
- -1);
-
- gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
- gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 4);
-
- gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 7);
-
- gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 8);
-
- gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
-
- gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 0, 8);
- iter2 = iter;
- gtk_text_iter_forward_chars (&iter2, 10);
-
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
-
- gtk_text_iter_forward_chars (&iter, 7);
- gtk_text_iter_forward_chars (&iter2, 10);
-
- gtk_text_buffer_apply_tag_by_name (buffer, "bg_green", &iter, &iter2);
-
- gtk_text_iter_forward_chars (&iter, 12);
- gtk_text_iter_forward_chars (&iter2, 10);
-
- gtk_text_buffer_apply_tag_by_name (buffer, "bg_green", &iter, &iter2);
-
- gtk_text_iter_forward_chars (&iter, 10);
- gtk_text_iter_forward_chars (&iter2, 15);
-
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2);
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
-
- gtk_text_iter_forward_chars (&iter, 20);
- gtk_text_iter_forward_chars (&iter2, 20);
-
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2);
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
-
- gtk_text_iter_backward_chars (&iter, 25);
- gtk_text_iter_forward_chars (&iter2, 5);
-
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2);
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
-
- gtk_text_iter_forward_chars (&iter, 15);
- gtk_text_iter_backward_chars (&iter2, 10);
-
- gtk_text_buffer_remove_tag_by_name (buffer, "fg_red", &iter, &iter2);
- gtk_text_buffer_remove_tag_by_name (buffer, "fg_blue", &iter, &iter2);
-
- ++i;
- }
-
- /* Put in tags that are just at the beginning, and just near the end,
- * and just near the middle.
- */
- tag = gtk_text_buffer_create_tag (buffer, "front_tag", NULL);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 3);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter2, 300);
-
- gtk_text_buffer_apply_tag (buffer, tag, &iter, &iter2);
-
- tag = gtk_text_buffer_create_tag (buffer, "end_tag", NULL);
- gtk_text_buffer_get_end_iter (buffer, &iter2);
- gtk_text_iter_backward_chars (&iter2, 12);
- iter = iter2;
- gtk_text_iter_backward_chars (&iter, 157);
-
- gtk_text_buffer_apply_tag (buffer, tag, &iter, &iter2);
-
- tag = gtk_text_buffer_create_tag (buffer, "center_tag", NULL);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter,
- gtk_text_buffer_get_char_count (buffer)/2);
- gtk_text_iter_backward_chars (&iter, 37);
- iter2 = iter;
- gtk_text_iter_forward_chars (&iter2, 57);
-
- gtk_text_buffer_apply_tag (buffer, tag, &iter, &iter2);
-
- g_object_unref (pixbuf);
-}
-
-
-/*
- * Line separator tests (initially to avoid regression on bugzilla #57428)
- */
-
-static void
-test_line_separation (const char* str,
- gboolean expect_next_line,
- gboolean expect_end_iter,
- int expected_line_count,
- int expected_line_break,
- int expected_next_line_start)
-{
- GtkTextIter iter;
- GtkTextBuffer* buffer;
- gboolean on_next_line;
- gboolean on_end_iter;
- gint new_pos;
-
- buffer = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_set_text (buffer, str, -1);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, expected_line_break);
-
- g_assert (gtk_text_iter_ends_line (&iter) || gtk_text_iter_is_end (&iter));
-
- g_assert (gtk_text_buffer_get_line_count (buffer) == expected_line_count);
-
- on_next_line = gtk_text_iter_forward_line (&iter);
-
- g_assert (expect_next_line == on_next_line);
-
- on_end_iter = gtk_text_iter_is_end (&iter);
-
- g_assert (on_end_iter == expect_end_iter);
-
- new_pos = gtk_text_iter_get_offset (&iter);
-
- if (on_next_line)
- g_assert (expected_next_line_start == new_pos);
-
- ++expected_line_break;
- while (expected_line_break < expected_next_line_start)
- {
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, expected_line_break);
-
- g_assert (!gtk_text_iter_ends_line (&iter));
-
- on_next_line = gtk_text_iter_forward_line (&iter);
-
- g_assert (expect_next_line == on_next_line);
-
- new_pos = gtk_text_iter_get_offset (&iter);
-
- if (on_next_line)
- g_assert (expected_next_line_start == new_pos);
-
- ++expected_line_break;
- }
-
- /* FIXME tests for backward line */
-
- g_object_unref (buffer);
-}
-
-/* there are cases where \r and \n should not be treated like \r\n,
- * originally bug #337022. */
-static void
-split_r_n_separators_test (void)
-{
- GtkTextBuffer *buffer;
- GtkTextIter iter;
-
- buffer = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_set_text (buffer, "foo\ra\nbar\n", -1);
-
- /* delete 'a' so that we have
-
- 1 foo\r
- 2 \n
- 3 bar\n
-
- * and both \r and \n are line separators */
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 5);
- gtk_text_buffer_backspace (buffer, &iter, TRUE, TRUE);
-
- g_assert (gtk_text_iter_ends_line (&iter));
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 3);
- g_assert (gtk_text_iter_ends_line (&iter));
-
- g_object_unref (buffer);
-}
-
-static void
-test_line_separator (void)
-{
- char *str;
- char buf[7] = { '\0', };
-
- /* Only one character has type G_UNICODE_PARAGRAPH_SEPARATOR in
- * Unicode 3.0; update this if that changes.
- */
-#define PARAGRAPH_SEPARATOR 0x2029
-
- test_line_separation ("line", FALSE, TRUE, 1, 4, 4);
- test_line_separation ("line\r\n", FALSE, TRUE, 2, 4, 6);
- test_line_separation ("line\r", FALSE, TRUE, 2, 4, 5);
- test_line_separation ("line\n", FALSE, TRUE, 2, 4, 5);
- test_line_separation ("line\rqw", TRUE, FALSE, 2, 4, 5);
- test_line_separation ("line\nqw", TRUE, FALSE, 2, 4, 5);
- test_line_separation ("line\r\nqw", TRUE, FALSE, 2, 4, 6);
-
- g_unichar_to_utf8 (PARAGRAPH_SEPARATOR, buf);
-
- str = g_strdup_printf ("line%s", buf);
- test_line_separation (str, FALSE, TRUE, 2, 4, 5);
- g_free (str);
- str = g_strdup_printf ("line%sqw", buf);
- test_line_separation (str, TRUE, FALSE, 2, 4, 5);
- g_free (str);
-
- split_r_n_separators_test ();
-}
-
-static void
-test_backspace (void)
-{
- GtkTextBuffer *buffer;
- GtkTextIter iter;
- gboolean ret;
-
- buffer = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_set_text (buffer, "foo", -1);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 2);
- ret = gtk_text_buffer_backspace (buffer, &iter, TRUE, TRUE);
- g_assert (ret);
- g_assert_cmpint (1, ==, gtk_text_iter_get_offset (&iter));
- g_assert_cmpint (2, ==, gtk_text_buffer_get_char_count (buffer));
-
- gtk_text_buffer_set_text (buffer, "foo", -1);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
- ret = gtk_text_buffer_backspace (buffer, &iter, TRUE, TRUE);
- g_assert (!ret);
- g_assert_cmpint (0, ==, gtk_text_iter_get_offset (&iter));
- g_assert_cmpint (3, ==, gtk_text_buffer_get_char_count (buffer));
-
- /* test bug #544724 */
- gtk_text_buffer_set_text (buffer, "foo\r\n\r\nbar", -1);
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 5);
- ret = gtk_text_buffer_backspace (buffer, &iter, TRUE, TRUE);
- g_assert (ret);
- g_assert_cmpint (0, ==, gtk_text_iter_get_line (&iter));
- g_assert_cmpint (8, ==, gtk_text_buffer_get_char_count (buffer));
-
- g_object_unref (buffer);
-}
-
-static void
-test_logical_motion (void)
-{
- char *str;
- char buf1[7] = { '\0', };
- char buf2[7] = { '\0', };
- char buf3[7] = { '\0', };
- int expected[30];
- int expected_steps;
- int i;
- GtkTextBuffer *buffer;
- GtkTextIter iter;
-
- buffer = gtk_text_buffer_new (NULL);
-
-#define LEADING_JAMO 0x1111
-#define VOWEL_JAMO 0x1167
-#define TRAILING_JAMO 0x11B9
-
- g_unichar_to_utf8 (LEADING_JAMO, buf1);
- g_unichar_to_utf8 (VOWEL_JAMO, buf2);
- g_unichar_to_utf8 (TRAILING_JAMO, buf3);
-
- /* Build the string "abc<leading><vowel><trailing>def\r\nxyz" */
- str = g_strconcat ("abc", buf1, buf2, buf3, "def\r\nxyz", NULL);
- gtk_text_buffer_set_text (buffer, str, -1);
- g_free (str);
-
- /* Check cursor positions */
- memset (expected, 0, sizeof (expected));
- expected[0] = 0; /* before 'a' */
- expected[1] = 1; /* before 'b' */
- expected[2] = 2; /* before 'c' */
- expected[3] = 3; /* before jamo */
- expected[4] = 6; /* before 'd' */
- expected[5] = 7; /* before 'e' */
- expected[6] = 8; /* before 'f' */
- expected[7] = 9; /* before '\r' */
- expected[8] = 11; /* before 'x' */
- expected[9] = 12; /* before 'y' */
- expected[10] = 13; /* before 'z' */
- expected[11] = 14; /* after 'z' (only matters going backward) */
- expected_steps = 11;
-
- gtk_text_buffer_get_start_iter (buffer, &iter);
- i = 0;
- do
- {
- int pos;
-
- pos = gtk_text_iter_get_offset (&iter);
-
- if (pos != expected[i])
- {
- g_error ("Cursor position %d, expected %d",
- pos, expected[i]);
- }
-
- ++i;
- }
- while (gtk_text_iter_forward_cursor_position (&iter));
-
- if (!gtk_text_iter_is_end (&iter))
- g_error ("Expected to stop at the end iterator\n");
-
- if (!gtk_text_iter_is_cursor_position (&iter))
- g_error ("Should be a cursor position before the end iterator");
-
- if (i != expected_steps)
- g_error ("Expected %d steps, there were actually %d\n", expected_steps, i);
-
- i = expected_steps;
- do
- {
- int pos;
-
- pos = gtk_text_iter_get_offset (&iter);
-
- if (pos != expected[i])
- {
- g_error ("Moving backward, cursor position %d, expected %d",
- pos, expected[i]);
- }
-
- /* g_print ("%d = %d\n", pos, expected[i]); */
-
- --i;
- }
- while (gtk_text_iter_backward_cursor_position (&iter));
-
- if (i != -1)
- g_error ("Expected %d steps, there were actually %d\n", expected_steps - i, i);
-
- if (!gtk_text_iter_is_start (&iter))
- g_error ("Expected to stop at the start iterator\n");
-
-
- /* Check sentence boundaries */
-
- gtk_text_buffer_set_text (buffer, "Hi.\nHi. \nHi! Hi. Hi? Hi.", -1);
-
- memset (expected, 0, sizeof (expected));
-
- expected[0] = 0; /* before first Hi */
- expected[1] = 3; /* After first . */
- expected[2] = 7; /* After second . */
- expected[3] = 12; /* After ! */
- expected[4] = 16; /* After third . */
- expected[5] = 20; /* After ? */
-
- expected_steps = 6;
-
- gtk_text_buffer_get_start_iter (buffer, &iter);
- i = 0;
- do
- {
- int pos;
-
- pos = gtk_text_iter_get_offset (&iter);
-
- if (pos != expected[i])
- {
- g_error ("Sentence position %d, expected %d",
- pos, expected[i]);
- }
-
- if (i != 0 &&
- !gtk_text_iter_is_end (&iter) &&
- !gtk_text_iter_ends_sentence (&iter))
- g_error ("Iterator at %d should end a sentence", pos);
-
- ++i;
- }
- while (gtk_text_iter_forward_sentence_end (&iter));
-
- if (i != expected_steps)
- g_error ("Expected %d steps, there were actually %d\n", expected_steps, i);
-
- if (!gtk_text_iter_is_end (&iter))
- g_error ("Expected to stop at the end iterator\n");
-
- gtk_text_buffer_set_text (buffer, "Hi.\nHi. \nHi! Hi. Hi? Hi.", -1);
-
- memset (expected, 0, sizeof (expected));
-
- expected[0] = 24;
- expected[1] = 21;
- expected[2] = 17;
- expected[3] = 13;
- expected[4] = 9;
- expected[5] = 4;
- expected[6] = 0;
-
- expected_steps = 7;
-
- gtk_text_buffer_get_end_iter (buffer, &iter);
- i = 0;
- do
- {
- int pos;
-
- pos = gtk_text_iter_get_offset (&iter);
-
- if (pos != expected[i])
- {
- g_error ("Sentence position %d, expected %d",
- pos, expected[i]);
- }
-
- if (pos != 0 &&
- !gtk_text_iter_is_end (&iter) &&
- !gtk_text_iter_starts_sentence (&iter))
- g_error ("Iterator at %d should start a sentence", pos);
-
- ++i;
- }
- while (gtk_text_iter_backward_sentence_start (&iter));
-
- if (i != expected_steps)
- g_error ("Expected %d steps, there were actually %d\n", expected_steps, i);
-
- if (gtk_text_iter_get_offset (&iter) != 0)
- g_error ("Expected to stop at the start iterator\n");
-
- g_object_unref (buffer);
-}
-
-static void
-test_marks (void)
-{
- GtkTextBuffer *buf1, *buf2;
- GtkTextMark *mark;
- GtkTextIter iter;
-
- buf1 = gtk_text_buffer_new (NULL);
- buf2 = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_get_start_iter (buf1, &iter);
- mark = gtk_text_buffer_create_mark (buf1, "foo", &iter, TRUE);
- g_object_ref (mark);
- gtk_text_mark_set_visible (mark, TRUE);
- gtk_text_buffer_delete_mark (buf1, mark);
-
- g_assert (gtk_text_mark_get_visible (mark));
- g_assert (gtk_text_mark_get_left_gravity (mark));
- g_assert (!strcmp ("foo", gtk_text_mark_get_name (mark)));
- g_assert (gtk_text_mark_get_buffer (mark) == NULL);
- g_assert (gtk_text_mark_get_deleted (mark));
- g_assert (gtk_text_buffer_get_mark (buf1, "foo") == NULL);
-
- gtk_text_buffer_get_start_iter (buf2, &iter);
- gtk_text_buffer_add_mark (buf2, mark, &iter);
- gtk_text_buffer_insert (buf2, &iter, "ewfwefwefwe", -1);
- gtk_text_buffer_get_iter_at_mark (buf2, &iter, mark);
-
- g_assert (gtk_text_mark_get_visible (mark));
- g_assert (gtk_text_iter_is_start (&iter));
- g_assert (gtk_text_mark_get_left_gravity (mark));
- g_assert (!strcmp ("foo", gtk_text_mark_get_name (mark)));
- g_assert (gtk_text_mark_get_buffer (mark) == buf2);
- g_assert (!gtk_text_mark_get_deleted (mark));
- g_assert (gtk_text_buffer_get_mark (buf2, "foo") == mark);
-
- gtk_text_buffer_delete_mark (buf2, mark);
- gtk_text_mark_set_visible (mark, FALSE);
- g_object_unref (mark);
-
- mark = gtk_text_mark_new ("blah", TRUE);
- gtk_text_buffer_get_start_iter (buf1, &iter);
- gtk_text_mark_set_visible (mark, TRUE);
- gtk_text_buffer_add_mark (buf1, mark, &iter);
-
- g_assert (gtk_text_mark_get_visible (mark));
- g_assert (gtk_text_mark_get_buffer (mark) == buf1);
- g_assert (!gtk_text_mark_get_deleted (mark));
- g_assert (gtk_text_buffer_get_mark (buf1, "blah") == mark);
- g_assert (!strcmp ("blah", gtk_text_mark_get_name (mark)));
-
- gtk_text_mark_set_visible (mark, FALSE);
- gtk_text_buffer_delete_mark (buf1, mark);
- g_assert (!gtk_text_mark_get_visible (mark));
- g_assert (gtk_text_buffer_get_mark (buf1, "blah") == NULL);
- g_assert (gtk_text_mark_get_buffer (mark) == NULL);
- g_assert (gtk_text_mark_get_deleted (mark));
-
- gtk_text_buffer_get_start_iter (buf2, &iter);
- gtk_text_buffer_add_mark (buf2, mark, &iter);
- g_assert (gtk_text_mark_get_buffer (mark) == buf2);
- g_assert (!gtk_text_mark_get_deleted (mark));
- g_assert (gtk_text_buffer_get_mark (buf2, "blah") == mark);
- g_assert (!strcmp ("blah", gtk_text_mark_get_name (mark)));
-
- g_object_unref (mark);
- g_object_unref (buf1);
- g_object_unref (buf2);
-}
-
-static void
-test_utf8 (void)
-{
- gunichar ch;
-
- /* Check UTF8 unknown char thing */
- g_assert (GTK_TEXT_UNKNOWN_CHAR_UTF8_LEN == 3);
- g_assert (g_utf8_strlen (gtk_text_unknown_char_utf8_gtk_tests_only (), 3) == 1);
- ch = g_utf8_get_char (gtk_text_unknown_char_utf8_gtk_tests_only ());
- g_assert (ch == GTK_TEXT_UNKNOWN_CHAR);
-}
-
-static void
-test_empty_buffer (void)
-{
- GtkTextBuffer *buffer;
- int n;
- GtkTextIter start;
-
- buffer = gtk_text_buffer_new (NULL);
-
- /* Check that buffer starts with one empty line and zero chars */
- n = gtk_text_buffer_get_line_count (buffer);
- if (n != 1)
- g_error ("%d lines, expected 1", n);
-
- n = gtk_text_buffer_get_char_count (buffer);
- if (n != 0)
- g_error ("%d chars, expected 0", n);
-
- /* empty first line contains 0 chars */
- gtk_text_buffer_get_start_iter (buffer, &start);
- n = gtk_text_iter_get_chars_in_line (&start);
- if (n != 0)
- g_error ("%d chars in first line, expected 0", n);
- n = gtk_text_iter_get_bytes_in_line (&start);
- if (n != 0)
- g_error ("%d bytes in first line, expected 0", n);
-
- /* Run gruesome alien test suite on buffer */
- run_tests (buffer);
-
- g_object_unref (buffer);
-}
-
-static void
-test_get_set(void)
-{
- GtkTextBuffer *buffer;
-
- buffer = gtk_text_buffer_new (NULL);
-
- check_get_set_text (buffer, "Hello");
- check_get_set_text (buffer, "Hello\n");
- check_get_set_text (buffer, "Hello\r\n");
- check_get_set_text (buffer, "Hello\r");
- check_get_set_text (buffer, "Hello\nBar\nFoo");
- check_get_set_text (buffer, "Hello\nBar\nFoo\n");
-
- g_object_unref (buffer);
-}
-
-static void
-test_fill_empty (void)
-{
- GtkTextBuffer *buffer;
- int n;
- GtkTextIter start, end;
-
- buffer = gtk_text_buffer_new (NULL);
-
- /* Put stuff in the buffer */
- fill_buffer (buffer);
-
- /* Subject stuff-bloated buffer to further torment */
- run_tests (buffer);
-
- /* Delete all stuff from the buffer */
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- gtk_text_buffer_delete (buffer, &start, &end);
-
- /* Check buffer for emptiness (note that a single
- empty line always remains in the buffer) */
- n = gtk_text_buffer_get_line_count (buffer);
- if (n != 1)
- g_error ("%d lines, expected 1", n);
-
- n = gtk_text_buffer_get_char_count (buffer);
- if (n != 0)
- g_error ("%d chars, expected 0", n);
-
- run_tests (buffer);
-
- g_object_unref (buffer);
-}
-
-static void
-test_tag (void)
-{
- GtkTextBuffer *buffer;
- GtkTextIter start, end;
-
- buffer = gtk_text_buffer_new (NULL);
-
- fill_buffer (buffer);
-
- gtk_text_buffer_set_text (buffer, "adcdef", -1);
- gtk_text_buffer_get_iter_at_offset (buffer, &start, 1);
- gtk_text_buffer_get_iter_at_offset (buffer, &end, 3);
- gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &start, &end);
-
- run_tests (buffer);
-
- g_object_unref (buffer);
-}
-
-int
-main (int argc, char** argv)
-{
- /* First, we turn on btree debugging. */
- gtk_set_debug_flags (gtk_get_debug_flags () | GTK_DEBUG_TEXT);
-
- gtk_test_init (&argc, &argv);
-
- g_test_add_func ("/TextBuffer/UTF8 unknown char", test_utf8);
- g_test_add_func ("/TextBuffer/Line separator", test_line_separator);
- g_test_add_func ("/TextBuffer/Backspace", test_backspace);
- g_test_add_func ("/TextBuffer/Logical motion", test_logical_motion);
- g_test_add_func ("/TextBuffer/Marks", test_marks);
- g_test_add_func ("/TextBuffer/Empty buffer", test_empty_buffer);
- g_test_add_func ("/TextBuffer/Get and Set", test_get_set);
- g_test_add_func ("/TextBuffer/Fill and Empty", test_fill_empty);
- g_test_add_func ("/TextBuffer/Tag", test_tag);
-
- return g_test_run();
-}
diff --git a/gtk/tests/textiter.c b/gtk/tests/textiter.c
deleted file mode 100644
index bee33de5f7..0000000000
--- a/gtk/tests/textiter.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-#include <stdio.h>
-#include <string.h>
-
-#include <gtk/gtk.h>
-
-static void
-test_empty_search ()
-{
- GtkTextBuffer *buffer;
- GtkTextIter it, s, e;
- gboolean res;
-
- buffer = gtk_text_buffer_new (NULL);
- gtk_text_buffer_set_text (buffer, "This is some foo text", -1);
-
- /* search from start forward */
- gtk_text_buffer_get_start_iter (buffer, &it);
- res = gtk_text_iter_forward_search (&it, "", 0, &s, &e, NULL);
- g_assert (res);
- g_assert_cmpint (gtk_text_iter_get_offset (&s), ==, gtk_text_iter_get_offset (&e));
- g_assert_cmpint (gtk_text_iter_get_offset (&s), ==, 1);
-
- /* search from end backward */
- gtk_text_buffer_get_end_iter (buffer, &it);
- res = gtk_text_iter_backward_search (&it, "", 0, &s, &e, NULL);
- g_assert (res);
- g_assert_cmpint (gtk_text_iter_get_offset (&s), ==, gtk_text_iter_get_offset (&e));
- g_assert_cmpint (gtk_text_iter_get_offset (&s), ==, 20);
-}
-
-static void
-check_found_forward (const gchar *haystack,
- const gchar *needle,
- GtkTextSearchFlags flags,
- int expected_start,
- int expected_end,
- const gchar *expected_string)
-{
- GtkTextBuffer *buffer;
- GtkTextIter i, s, e;
- gboolean res;
- gchar *text;
-
- buffer = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_set_text (buffer, haystack, -1);
-
- /* TODO: add test with limit before, after and in the middle
- of expected start and end */
-
- /* search from start forward */
- gtk_text_buffer_get_start_iter (buffer, &i);
- res = gtk_text_iter_forward_search (&i, needle, flags, &s, &e, NULL);
- g_assert (res);
- g_assert_cmpint (expected_start, ==, gtk_text_iter_get_offset (&s));
- g_assert_cmpint (expected_end, ==, gtk_text_iter_get_offset (&e));
- text = gtk_text_iter_get_text (&s, &e);
- g_assert_cmpstr (expected_string, ==, text);
- g_free (text);
-
- g_object_unref (buffer);
-}
-
-static void
-check_found_backward (const gchar *haystack,
- const gchar *needle,
- GtkTextSearchFlags flags,
- int expected_start,
- int expected_end,
- const gchar *expected_string)
-{
- GtkTextBuffer *buffer;
- GtkTextIter i, s, e;
- gboolean res;
- gchar *text;
-
- buffer = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_set_text (buffer, haystack, -1);
-
- /* search from end backward */
- gtk_text_buffer_get_end_iter (buffer, &i);
- res = gtk_text_iter_backward_search (&i, needle, flags, &s, &e, NULL);
- g_assert (res);
- g_assert_cmpint (expected_start, ==, gtk_text_iter_get_offset (&s));
- g_assert_cmpint (expected_end, ==, gtk_text_iter_get_offset (&e));
- text = gtk_text_iter_get_text (&s, &e);
- g_assert_cmpstr (expected_string, ==, text);
- g_free (text);
-
- g_object_unref (buffer);
-}
-
-static void
-check_not_found (const gchar *haystack,
- const gchar *needle,
- GtkTextSearchFlags flags)
-{
- GtkTextBuffer *buffer;
- GtkTextIter i, s, e;
- gboolean res;
-
- buffer = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_set_text (buffer, haystack, -1);
-
- /* search from start forward */
- gtk_text_buffer_get_start_iter (buffer, &i);
- res = gtk_text_iter_forward_search (&i, needle, flags, &s, &e, NULL);
- g_assert (res == FALSE);
-
- /* search from end backward */
- gtk_text_buffer_get_end_iter (buffer, &i);
- res = gtk_text_iter_backward_search (&i, needle, flags, &s, &e, NULL);
- g_assert (res == FALSE);
-
- g_object_unref (buffer);
-}
-
-static void
-test_full_buffer (void)
-{
- check_found_forward ("foo", "foo", 0, 0, 3, "foo");
- check_found_backward ("foo", "foo", 0, 0, 3, "foo");
- check_found_forward ("foo", "foo", GTK_TEXT_SEARCH_CASE_INSENSITIVE, 0, 3, "foo");
- check_found_backward ("foo", "foo", GTK_TEXT_SEARCH_CASE_INSENSITIVE, 0, 3, "foo");
- check_found_forward ("foo", "Foo", GTK_TEXT_SEARCH_CASE_INSENSITIVE, 0, 3, "foo");
- check_found_backward ("foo", "Foo", GTK_TEXT_SEARCH_CASE_INSENSITIVE, 0, 3, "foo");
-}
-
-static void
-test_search (void)
-{
- /* simple match */
- check_found_forward ("This is some foo text", "foo", 0, 13, 16, "foo");
- check_found_backward ("This is some foo text", "foo", 0, 13, 16, "foo");
- check_not_found ("This is some foo text", "Foo", 0);
-
- /* different matches for forward and backward */
- check_found_forward ("This is some foo foo text", "foo", 0, 13, 16, "foo");
- check_found_backward ("This is some foo foo text", "foo", 0, 17, 20, "foo");
-
- /* new lines in the haystack */
- check_found_forward ("This is some\nfoo text", "foo", 0, 13, 16, "foo");
- check_found_backward ("This is some\nfoo text", "foo", 0, 13, 16, "foo");
- check_found_forward ("This is some foo\nfoo text", "foo", 0, 13, 16, "foo");
- check_found_backward ("This is some foo\nfoo text", "foo", 0, 17, 20, "foo");
- check_not_found ("This is some\nfoo text", "Foo", 0);
-
- /* end of buffer */
- check_found_forward ("This is some\ntext foo", "foo", 0, 18, 21, "foo");
- check_found_backward ("This is some\ntext foo", "foo", 0, 18, 21, "foo");
- check_not_found ("This is some\ntext foo", "Foo", 0);
-
- /* multiple lines in the needle */
- check_found_forward ("This is some foo\nfoo text", "foo\nfoo", 0, 13, 20, "foo\nfoo");
- check_found_backward ("This is some foo\nfoo text", "foo\nfoo", 0, 13, 20, "foo\nfoo");
- check_not_found ("This is some foo\nfoo text", "Foo\nfoo", 0);
-}
-
-static void
-test_search_caseless (void)
-{
- GtkTextSearchFlags flags;
-
- flags = GTK_TEXT_SEARCH_CASE_INSENSITIVE;
-
- /* simple match */
- check_found_forward ("This is some foo text", "foo", flags, 13, 16, "foo");
- check_found_forward ("This is some foo text", "Foo", flags, 13, 16, "foo");
- check_found_forward ("This is some Foo text", "foo", flags, 13, 16, "Foo");
- check_found_backward ("This is some foo text", "foo", flags, 13, 16, "foo");
- check_found_backward ("This is some foo text", "Foo", flags, 13, 16, "foo");
- check_found_backward ("This is some Foo text", "foo", flags, 13, 16, "Foo");
-
- /* check also that different composition of utf8 characters
- (e.g. accented letters) match */
-
- /* different matches for forward and backward */
- check_found_forward ("This is some foo foo text", "foo", flags, 13, 16, "foo");
- check_found_forward ("This is some foo foo text", "Foo", flags, 13, 16, "foo");
- check_found_forward ("This is some Foo foo text", "foo", flags, 13, 16, "Foo");
- check_found_forward ("This is some \303\200 \303\240 text", "\303\240", flags, 13, 14, "\303\200");
- check_found_forward ("This is some \303\200 \303\240 text", "\303\200", flags, 13, 14, "\303\200");
- check_found_forward ("This is some \303\200 \303\240 text", "a\314\200", flags, 13, 14, "\303\200");
- check_found_backward ("This is some foo foo text", "foo", flags, 17, 20, "foo");
- check_found_backward ("This is some foo foo text", "Foo", flags, 17, 20, "foo");
- check_found_backward ("This is some foo Foo text", "foo", flags, 17, 20, "Foo");
- check_found_backward ("This is some \303\200 \303\240 text", "\303\240", flags, 15, 16, "\303\240");
- check_found_backward ("This is some \303\200 \303\240 text", "\303\200", flags, 15, 16, "\303\240");
- check_found_backward ("This is some \303\200 \303\240 text", "a\314\200", flags, 15, 16, "\303\240");
-
- /* new lines in the haystack */
- check_found_forward ("This is some\nfoo text", "foo", flags, 13, 16, "foo");
- check_found_forward ("This is some\nfoo text", "Foo", flags, 13, 16, "foo");
- check_found_forward ("This is some\nFoo text", "foo", flags, 13, 16, "Foo");
- check_found_forward ("This is some\n\303\200 text", "\303\240", flags, 13, 14, "\303\200");
- check_found_forward ("This is some\n\303\200 text", "a\314\200", flags, 13, 14, "\303\200");
- check_found_backward ("This is some\nfoo text", "foo", flags, 13, 16, "foo");
- check_found_backward ("This is some\nfoo text", "Foo", flags, 13, 16, "foo");
- check_found_backward ("This is some\nFoo text", "foo", flags, 13, 16, "Foo");
- check_found_backward ("This is some\n\303\200 text", "\303\240", flags, 13, 14, "\303\200");
- check_found_backward ("This is some\n\303\200 text", "a\314\200", flags, 13, 14, "\303\200");
- check_found_forward ("This is some foo\nfoo text", "foo", flags, 13, 16, "foo");
- check_found_forward ("This is some foo\nfoo text", "Foo", flags, 13, 16, "foo");
- check_found_forward ("This is some Foo\nfoo text", "foo", flags, 13, 16, "Foo");
- check_found_forward ("This is some \303\200\n\303\200 text", "\303\240", flags, 13, 14, "\303\200");
- check_found_forward ("This is some \303\200\n\303\200 text", "a\314\200", flags, 13, 14, "\303\200");
- check_found_backward ("This is some foo\nfoo text", "foo", flags, 17, 20, "foo");
- check_found_backward ("This is some foo\nfoo text", "Foo", flags, 17, 20, "foo");
- check_found_backward ("This is some foo\nFoo text", "foo", flags, 17, 20, "Foo");
- check_found_backward ("This is some \303\200\n\303\200 text", "\303\240", flags, 15, 16, "\303\200");
- check_found_backward ("This is some \303\200\n\303\200 text", "a\314\200", flags, 15, 16, "\303\200");
-
- /* end of buffer */
- check_found_forward ("This is some\ntext foo", "foo", flags, 18, 21, "foo");
- check_found_forward ("This is some\ntext foo", "Foo", flags, 18, 21, "foo");
- check_found_forward ("This is some\ntext Foo", "foo", flags, 18, 21, "Foo");
- check_found_forward ("This is some\ntext \303\200", "\303\240", flags, 18, 19, "\303\200");
- check_found_forward ("This is some\ntext \303\200", "a\314\200", flags, 18, 19, "\303\200");
- check_found_backward ("This is some\ntext foo", "foo", flags, 18, 21, "foo");
- check_found_backward ("This is some\ntext foo", "Foo", flags, 18, 21, "foo");
- check_found_backward ("This is some\ntext Foo", "foo", flags, 18, 21, "Foo");
- check_found_backward ("This is some\ntext \303\200", "\303\240", flags, 18, 19, "\303\200");
- check_found_backward ("This is some\ntext \303\200", "a\314\200", flags, 18, 19, "\303\200");
-
- /* multiple lines in the needle */
- check_found_forward ("This is some foo\nfoo text", "foo\nfoo", flags, 13, 20, "foo\nfoo");
- check_found_forward ("This is some foo\nfoo text", "Foo\nFoo", flags, 13, 20, "foo\nfoo");
- check_found_forward ("This is some Foo\nFoo text", "foo\nfoo", flags, 13, 20, "Foo\nFoo");
- check_found_forward ("This is some \303\200\n\303\200 text", "\303\240\n\303\240", flags, 13, 16, "\303\200\n\303\200");
- check_found_forward ("This is some \303\200\n\303\200 text", "a\314\200\na\314\200", flags, 13, 16, "\303\200\n\303\200");
- check_found_backward ("This is some foo\nfoo text", "foo\nfoo", flags, 13, 20, "foo\nfoo");
- check_found_backward ("This is some foo\nfoo text", "Foo\nFoo", flags, 13, 20, "foo\nfoo");
- check_found_backward ("This is some Foo\nFoo text", "foo\nfoo", flags, 13, 20, "Foo\nFoo");
- check_found_backward ("This is some \303\200\n\303\200 text", "\303\240\n\303\240", flags, 13, 16, "\303\200\n\303\200");
- check_found_backward ("This is some \303\200\n\303\200 text", "a\314\200\na\314\200", flags, 13, 16, "\303\200\n\303\200");
-}
-
-int
-main (int argc, char** argv)
-{
- gtk_test_init (&argc, &argv);
-
- g_test_add_func ("/TextIter/Search Empty", test_empty_search);
- g_test_add_func ("/TextIter/Search Full Buffer", test_full_buffer);
- g_test_add_func ("/TextIter/Search", test_search);
- g_test_add_func ("/TextIter/Search Caseless", test_search_caseless);
-
- return g_test_run();
-}
diff --git a/gtk/tests/treemodel.c b/gtk/tests/treemodel.c
deleted file mode 100644
index 13eeb4f770..0000000000
--- a/gtk/tests/treemodel.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/* Main wrapper for TreeModel test suite.
- * Copyright (C) 2011 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-#include "treemodel.h"
-
-int
-main (int argc,
- char **argv)
-{
- gtk_test_init (&argc, &argv, NULL);
-
- g_test_bug_base ("http://bugzilla.gnome.org/");
-
- register_list_store_tests ();
- register_tree_store_tests ();
- register_model_ref_count_tests ();
- register_sort_model_tests ();
- register_filter_model_tests ();
-
- return g_test_run ();
-}
-
-/*
- * Signal monitor
- */
-
-static const char *
-signal_name_to_string (SignalName signal)
-{
- switch (signal)
- {
- case ROW_INSERTED:
- return "row-inserted";
-
- case ROW_DELETED:
- return "row-deleted";
-
- case ROW_CHANGED:
- return "row-changed";
-
- case ROW_HAS_CHILD_TOGGLED:
- return "row-has-child-toggled";
-
- case ROWS_REORDERED:
- return "rows-reordered";
-
- default:
- /* Fall through */
- break;
- }
-
- return "(unknown)";
-}
-
-typedef struct
-{
- SignalName signal;
- GtkTreePath *path;
-
- /* For rows-reordered */
- int *new_order;
- int len;
-}
-Signal;
-
-
-static Signal *
-signal_new (SignalName signal, GtkTreePath *path)
-{
- Signal *s;
-
- s = g_new0 (Signal, 1);
- s->signal = signal;
- s->path = gtk_tree_path_copy (path);
- s->new_order = NULL;
-
- return s;
-}
-
-static Signal *
-signal_new_with_order (SignalName signal, GtkTreePath *path,
- int *new_order, int len)
-{
- Signal *s = signal_new (signal, path);
-
- s->new_order = new_order;
- s->len = len;
-
- return s;
-}
-
-static void
-signal_free (Signal *s)
-{
- if (s->path)
- gtk_tree_path_free (s->path);
-
- g_free (s);
-}
-
-
-struct _SignalMonitor
-{
- GQueue *queue;
- GtkTreeModel *client;
- gulong signal_ids[LAST_SIGNAL];
-};
-
-
-static void
-signal_monitor_generic_handler (SignalMonitor *m,
- SignalName signal,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- GtkTreePath *path,
- int *new_order)
-{
- Signal *s;
-
- if (g_queue_is_empty (m->queue))
- {
- gchar *path_str;
-
- path_str = gtk_tree_path_to_string (path);
- g_error ("Signal queue empty, got signal %s path %s\n",
- signal_name_to_string (signal), path_str);
- g_free (path_str);
-
- g_assert_not_reached ();
- }
-
- if (m->client != model)
- {
- g_error ("Model mismatch; expected %p, got %p\n",
- m->client, model);
- g_assert_not_reached ();
- }
-
- s = g_queue_peek_tail (m->queue);
-
-#if 0
- /* For debugging: output signals that are coming in. Leaks memory. */
- g_print ("signal=%s path=%s\n", signal_name_to_string (signal),
- gtk_tree_path_to_string (path));
-#endif
-
- if (s->signal != signal ||
- (gtk_tree_path_get_depth (s->path) == 0 &&
- gtk_tree_path_get_depth (path) != 0) ||
- (gtk_tree_path_get_depth (s->path) != 0 &&
- gtk_tree_path_compare (s->path, path) != 0))
- {
- gchar *path_str, *s_path_str;
-
- s_path_str = gtk_tree_path_to_string (s->path);
- path_str = gtk_tree_path_to_string (path);
-
- g_error ("Signals don't match; expected signal %s path %s, got signal %s path %s\n",
- signal_name_to_string (s->signal), s_path_str,
- signal_name_to_string (signal), path_str);
-
- g_free (s_path_str);
- g_free (path_str);
-
- g_assert_not_reached ();
- }
-
- if (signal == ROWS_REORDERED && s->new_order != NULL)
- {
- int i, len;
-
- g_assert (new_order != NULL);
-
- len = gtk_tree_model_iter_n_children (model, iter);
- g_assert (s->len == len);
-
- for (i = 0; i < len; i++)
- g_assert (s->new_order[i] == new_order[i]);
- }
-
- s = g_queue_pop_tail (m->queue);
-
- signal_free (s);
-}
-
-static void
-signal_monitor_row_inserted (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- signal_monitor_generic_handler (data, ROW_INSERTED,
- model, iter, path, NULL);
-}
-
-static void
-signal_monitor_row_deleted (GtkTreeModel *model,
- GtkTreePath *path,
- gpointer data)
-{
- signal_monitor_generic_handler (data, ROW_DELETED,
- model, NULL, path, NULL);
-}
-
-static void
-signal_monitor_row_changed (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- signal_monitor_generic_handler (data, ROW_CHANGED,
- model, iter, path, NULL);
-}
-
-static void
-signal_monitor_row_has_child_toggled (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- signal_monitor_generic_handler (data, ROW_HAS_CHILD_TOGGLED,
- model, iter, path, NULL);
-}
-
-static void
-signal_monitor_rows_reordered (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gint *new_order,
- gpointer data)
-{
- signal_monitor_generic_handler (data, ROWS_REORDERED,
- model, iter, path, new_order);
-}
-
-SignalMonitor *
-signal_monitor_new (GtkTreeModel *client)
-{
- SignalMonitor *m;
-
- m = g_new0 (SignalMonitor, 1);
- m->client = g_object_ref (client);
- m->queue = g_queue_new ();
-
- m->signal_ids[ROW_INSERTED] = g_signal_connect (client,
- "row-inserted",
- G_CALLBACK (signal_monitor_row_inserted),
- m);
- m->signal_ids[ROW_DELETED] = g_signal_connect (client,
- "row-deleted",
- G_CALLBACK (signal_monitor_row_deleted),
- m);
- m->signal_ids[ROW_CHANGED] = g_signal_connect (client,
- "row-changed",
- G_CALLBACK (signal_monitor_row_changed),
- m);
- m->signal_ids[ROW_HAS_CHILD_TOGGLED] = g_signal_connect (client,
- "row-has-child-toggled",
- G_CALLBACK (signal_monitor_row_has_child_toggled),
- m);
- m->signal_ids[ROWS_REORDERED] = g_signal_connect (client,
- "rows-reordered",
- G_CALLBACK (signal_monitor_rows_reordered),
- m);
-
- return m;
-}
-
-void
-signal_monitor_free (SignalMonitor *m)
-{
- int i;
-
- for (i = 0; i < LAST_SIGNAL; i++)
- g_signal_handler_disconnect (m->client, m->signal_ids[i]);
-
- g_object_unref (m->client);
-
- if (m->queue)
- g_queue_free (m->queue);
-
- g_free (m);
-}
-
-void
-signal_monitor_assert_is_empty (SignalMonitor *m)
-{
- g_assert (g_queue_is_empty (m->queue));
-}
-
-void
-signal_monitor_append_signal_path (SignalMonitor *m,
- SignalName signal,
- GtkTreePath *path)
-{
- Signal *s;
-
- s = signal_new (signal, path);
- g_queue_push_head (m->queue, s);
-}
-
-void
-signal_monitor_append_signal_reordered (SignalMonitor *m,
- SignalName signal,
- GtkTreePath *path,
- int *new_order,
- int len)
-{
- Signal *s;
-
- s = signal_new_with_order (signal, path, new_order, len);
- g_queue_push_head (m->queue, s);
-}
-
-void
-signal_monitor_append_signal (SignalMonitor *m,
- SignalName signal,
- const gchar *path_string)
-{
- Signal *s;
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (path_string);
-
- s = signal_new (signal, path);
- g_queue_push_head (m->queue, s);
-
- gtk_tree_path_free (path);
-}
diff --git a/gtk/tests/treemodel.h b/gtk/tests/treemodel.h
deleted file mode 100644
index 3723057dbf..0000000000
--- a/gtk/tests/treemodel.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Main wrapper for TreeModel test suite.
- * Copyright (C) 2011 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-void register_list_store_tests ();
-void register_tree_store_tests ();
-void register_sort_model_tests ();
-void register_filter_model_tests ();
-void register_model_ref_count_tests ();
-
-/*
- * Signal monitor
- */
-typedef struct _SignalMonitor SignalMonitor;
-typedef enum _SignalName SignalName;
-
-enum _SignalName
-{
- ROW_INSERTED,
- ROW_DELETED,
- ROW_CHANGED,
- ROW_HAS_CHILD_TOGGLED,
- ROWS_REORDERED,
- LAST_SIGNAL
-};
-
-
-SignalMonitor *signal_monitor_new (GtkTreeModel *client);
-void signal_monitor_free (SignalMonitor *m);
-
-void signal_monitor_assert_is_empty (SignalMonitor *m);
-
-void signal_monitor_append_signal_reordered (SignalMonitor *m,
- SignalName signal,
- GtkTreePath *path,
- int *new_order,
- int len);
-void signal_monitor_append_signal_path (SignalMonitor *m,
- SignalName signal,
- GtkTreePath *path);
-void signal_monitor_append_signal (SignalMonitor *m,
- SignalName signal,
- const gchar *path_string);
diff --git a/gtk/tests/treepath.c b/gtk/tests/treepath.c
deleted file mode 100644
index c014de2c5f..0000000000
--- a/gtk/tests/treepath.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* GtkTrePath tests.
- *
- * Copyright (C) 2011, Red Hat, Inc.
- * Authors: Matthias Clasen <mclasen@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-static void
-test_append (void)
-{
- GtkTreePath *p;
- gint i;
- gint *indices;
-
- p = gtk_tree_path_new ();
- for (i = 0; i < 100; i++)
- {
- g_assert_cmpint (gtk_tree_path_get_depth (p), ==, i);
- gtk_tree_path_append_index (p, i);
- }
-
- indices = gtk_tree_path_get_indices (p);
- for (i = 0; i < 100; i++)
- g_assert_cmpint (indices[i], ==, i);
-
- gtk_tree_path_free (p);
-}
-
-static void
-test_prepend (void)
-{
- GtkTreePath *p;
- gint i;
- gint *indices;
-
- p = gtk_tree_path_new ();
- for (i = 0; i < 100; i++)
- {
- g_assert_cmpint (gtk_tree_path_get_depth (p), ==, i);
- gtk_tree_path_prepend_index (p, i);
- }
-
- indices = gtk_tree_path_get_indices (p);
- for (i = 0; i < 100; i++)
- g_assert_cmpint (indices[i], ==, 99 - i);
-
- gtk_tree_path_free (p);
-}
-
-static void
-test_to_string (void)
-{
- const gchar *str = "0:1:2:3:4:5:6:7:8:9:10";
- GtkTreePath *p;
- gint *indices;
- gchar *s;
- gint i;
-
- p = gtk_tree_path_new_from_string (str);
- indices = gtk_tree_path_get_indices (p);
- for (i = 0; i < 10; i++)
- g_assert_cmpint (indices[i], ==, i);
- s = gtk_tree_path_to_string (p);
- g_assert_cmpstr (s, ==, str);
-
- gtk_tree_path_free (p);
- g_free (s);
-}
-
-static void
-test_from_indices (void)
-{
- GtkTreePath *p;
- gint *indices;
- gint i;
-
- p = gtk_tree_path_new_from_indices (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1);
- g_assert_cmpint (gtk_tree_path_get_depth (p), ==, 10);
- indices = gtk_tree_path_get_indices (p);
- for (i = 0; i < 10; i++)
- g_assert_cmpint (indices[i], ==, i);
- gtk_tree_path_free (p);
-}
-
-static void
-test_first (void)
-{
- GtkTreePath *p;
- p = gtk_tree_path_new_first ();
- g_assert_cmpint (gtk_tree_path_get_depth (p), ==, 1);
- g_assert_cmpint (gtk_tree_path_get_indices (p)[0], ==, 0);
- gtk_tree_path_free (p);
-}
-
-static void
-test_navigation (void)
-{
- GtkTreePath *p;
- GtkTreePath *q;
- gint *pi;
- gint *qi;
- gint i;
- gboolean res;
-
- p = gtk_tree_path_new_from_indices (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1);
- q = gtk_tree_path_copy (p);
- g_assert (gtk_tree_path_compare (p, q) == 0);
- gtk_tree_path_next (q);
- pi = gtk_tree_path_get_indices (p);
- qi = gtk_tree_path_get_indices (q);
- for (i = 0; i < 9; i++)
- g_assert_cmpint (pi[i], ==, qi[i]);
- g_assert_cmpint (qi[9], ==, pi[9] + 1);
-
- g_assert (!gtk_tree_path_is_ancestor (p, q));
- g_assert (!gtk_tree_path_is_ancestor (q, p));
- g_assert (!gtk_tree_path_is_descendant (p, q));
- g_assert (!gtk_tree_path_is_descendant (q, p));
-
- res = gtk_tree_path_prev (q);
- g_assert (res);
- g_assert (gtk_tree_path_compare (p, q) == 0);
-
- g_assert (!gtk_tree_path_is_ancestor (p, q));
- g_assert (!gtk_tree_path_is_ancestor (q, p));
- g_assert (!gtk_tree_path_is_descendant (p, q));
- g_assert (!gtk_tree_path_is_descendant (q, p));
-
- gtk_tree_path_down (q);
-
- g_assert (gtk_tree_path_compare (p, q) < 0);
-
- g_assert (gtk_tree_path_is_ancestor (p, q));
- g_assert (!gtk_tree_path_is_ancestor (q, p));
- g_assert (!gtk_tree_path_is_descendant (p, q));
- g_assert (gtk_tree_path_is_descendant (q, p));
-
- res = gtk_tree_path_prev (q);
- g_assert (!res);
-
- res = gtk_tree_path_up (q);
- g_assert (res);
- g_assert (gtk_tree_path_compare (p, q) == 0);
-
- g_assert_cmpint (gtk_tree_path_get_depth (q), ==, 10);
- res = gtk_tree_path_up (q);
- g_assert (res);
- g_assert_cmpint (gtk_tree_path_get_depth (q), ==, 9);
-
- gtk_tree_path_free (p);
- gtk_tree_path_free (q);
-}
-
-int
-main (int argc, char *argv[])
-{
- gtk_test_init (&argc, &argv, NULL);
-
- g_test_add_func ("/tree-path/append", test_append);
- g_test_add_func ("/tree-path/prepend", test_prepend);
- g_test_add_func ("/tree-path/to-string", test_to_string);
- g_test_add_func ("/tree-path/from-indices", test_from_indices);
- g_test_add_func ("/tree-path/first", test_first);
- g_test_add_func ("/tree-path/navigation", test_navigation);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/treestore.c b/gtk/tests/treestore.c
deleted file mode 100644
index d19297f5bf..0000000000
--- a/gtk/tests/treestore.c
+++ /dev/null
@@ -1,1178 +0,0 @@
-/* Extensive GtkTreeStore tests.
- * Copyright (C) 2007 Imendio AB
- * Authors: Kristian Rietveld <kris@imendio.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* To do:
- * - All the to do items from liststore.c, plus:
- * - Finish up the insertion tests; things aren't as nicely refactored
- * here as in GtkListStore, so we need to check for corner cases on
- * all insertion functions separately.
- * - We only test in the root level, we also need all tests "duplicated"
- * for child levels.
- * - And we also need tests for creating these child levels, etc.
- */
-
-#include "treemodel.h"
-
-#include <gtk/gtk.h>
-
-static inline gboolean
-iters_equal (GtkTreeIter *a,
- GtkTreeIter *b)
-{
- if (a->stamp != b->stamp)
- return FALSE;
-
- if (a->user_data != b->user_data)
- return FALSE;
-
- /* user_data2 and user_data3 are not used in GtkTreeStore */
-
- return TRUE;
-}
-
-static gboolean
-iter_position (GtkTreeStore *store,
- GtkTreeIter *iter,
- int n)
-{
- gboolean ret = TRUE;
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), iter);
- if (!path)
- return FALSE;
-
- if (gtk_tree_path_get_indices (path)[0] != n)
- ret = FALSE;
-
- gtk_tree_path_free (path);
-
- return ret;
-}
-
-/*
- * Fixture
- */
-typedef struct
-{
- GtkTreeIter iter[5];
- GtkTreeStore *store;
-} TreeStore;
-
-static void
-tree_store_setup (TreeStore *fixture,
- gconstpointer test_data)
-{
- int i;
-
- fixture->store = gtk_tree_store_new (1, G_TYPE_INT);
-
- for (i = 0; i < 5; i++)
- {
- gtk_tree_store_insert (fixture->store, &fixture->iter[i], NULL, i);
- gtk_tree_store_set (fixture->store, &fixture->iter[i], 0, i, -1);
- }
-}
-
-static void
-tree_store_teardown (TreeStore *fixture,
- gconstpointer test_data)
-{
- g_object_unref (fixture->store);
-}
-
-/*
- * The actual tests.
- */
-
-static void
-check_model (TreeStore *fixture,
- gint *new_order,
- gint skip)
-{
- int i;
- GtkTreePath *path;
-
- path = gtk_tree_path_new ();
- gtk_tree_path_down (path);
-
- /* Check validity of the model and validity of the iters-persistent
- * claim.
- */
- for (i = 0; i < 5; i++)
- {
- GtkTreeIter iter;
-
- if (i == skip)
- continue;
-
- /* The saved iterator at new_order[i] should match the iterator
- * at i.
- */
-
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
- &iter, path);
-
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &iter));
- g_assert (iters_equal (&iter, &fixture->iter[new_order[i]]));
-
- gtk_tree_path_next (path);
- }
-
- gtk_tree_path_free (path);
-}
-
-/* insertion */
-static void
-tree_store_test_insert_high_values (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_insert (store, &iter, NULL, 1234);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 1);
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- gtk_tree_store_insert (store, &iter2, NULL, 765);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-tree_store_test_append (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &iter, NULL);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 1);
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- gtk_tree_store_append (store, &iter2, NULL);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-tree_store_test_prepend (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_prepend (store, &iter, NULL);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 1);
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- gtk_tree_store_prepend (store, &iter2, NULL);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-tree_store_test_insert_after (void)
-{
- GtkTreeIter iter, iter2, iter3;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_append (store, &iter2, NULL);
-
- gtk_tree_store_insert_after (store, &iter3, NULL, &iter);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter3));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 3);
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 1));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 2));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 2));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 2));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-tree_store_test_insert_after_NULL (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &iter, NULL);
-
- /* move_after NULL is basically a prepend */
- gtk_tree_store_insert_after (store, &iter2, NULL, NULL);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 0));
- g_assert (iters_equal (&iter2, &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-tree_store_test_insert_before (void)
-{
- GtkTreeIter iter, iter2, iter3;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_append (store, &iter2, NULL);
-
- gtk_tree_store_insert_before (store, &iter3, NULL, &iter2);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter3));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 3);
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 1));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter_copy, 2));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter3, &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 2));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 2));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter3, &iter_copy));
- g_assert (iter_position (store, &iter3, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-static void
-tree_store_test_insert_before_NULL (void)
-{
- GtkTreeIter iter, iter2;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- gtk_tree_store_append (store, &iter, NULL);
-
- /* move_before NULL is basically an append */
- gtk_tree_store_insert_before (store, &iter2, NULL, NULL);
- g_assert (gtk_tree_store_iter_is_valid (store, &iter2));
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) == 2);
-
- /* Walk over the model */
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (!gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter_copy));
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_copy, NULL, 1));
- g_assert (iters_equal (&iter2, &iter_copy));
- g_assert (iter_position (store, &iter2, 1));
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (iter_position (store, &iter, 0));
-
- g_assert (!gtk_tree_model_iter_previous (GTK_TREE_MODEL (store), &iter_copy));
-
- g_object_unref (store);
-}
-
-/* setting values */
-static void
-tree_store_set_gvalue_to_transform (void)
-{
- GtkTreeStore *store;
- GtkTreeIter iter;
- GValue value = G_VALUE_INIT;
-
- /* https://bugzilla.gnome.org/show_bug.cgi?id=677649 */
- store = gtk_tree_store_new (1, G_TYPE_LONG);
- gtk_tree_store_append (store, &iter, NULL);
-
- g_value_init (&value, G_TYPE_INT);
- g_value_set_int (&value, 42);
- gtk_tree_store_set_value (store, &iter, 0, &value);
-}
-
-/* removal */
-static void
-tree_store_test_remove_begin (TreeStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { -1, 1, 2, 3, 4 };
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* Remove node at 0 */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_tree_store_remove (fixture->store, &iter) == TRUE);
- g_assert (!gtk_tree_store_iter_is_valid (fixture->store, &fixture->iter[0]));
- g_assert (iters_equal (&iter, &fixture->iter[1]));
-
- check_model (fixture, new_order, 0);
-}
-
-static void
-tree_store_test_remove_middle (TreeStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { 0, 1, -1, 3, 4 };
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* Remove node at 2 */
- path = gtk_tree_path_new_from_indices (2, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_tree_store_remove (fixture->store, &iter) == TRUE);
- g_assert (!gtk_tree_store_iter_is_valid (fixture->store, &fixture->iter[2]));
- g_assert (iters_equal (&iter, &fixture->iter[3]));
-
- check_model (fixture, new_order, 2);
-}
-
-static void
-tree_store_test_remove_end (TreeStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { 0, 1, 2, 3, -1 };
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* Remove node at 4 */
- path = gtk_tree_path_new_from_indices (4, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_tree_store_remove (fixture->store, &iter) == FALSE);
- g_assert (!gtk_tree_store_iter_is_valid (fixture->store, &fixture->iter[4]));
-
- check_model (fixture, new_order, 4);
-}
-
-static void
-tree_store_test_clear (TreeStore *fixture,
- gconstpointer user_data)
-{
- int i;
-
- gtk_tree_store_clear (fixture->store);
-
- g_assert (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (fixture->store), NULL) == 0);
-
- for (i = 0; i < 5; i++)
- g_assert (!gtk_tree_store_iter_is_valid (fixture->store, &fixture->iter[i]));
-}
-
-/* reorder */
-
-static void
-tree_store_test_reorder (TreeStore *fixture,
- gconstpointer user_data)
-{
- int new_order[5] = { 4, 1, 0, 2, 3 };
-
- gtk_tree_store_reorder (fixture->store, NULL, new_order);
- check_model (fixture, new_order, -1);
-}
-
-/* swapping */
-
-static void
-tree_store_test_swap_begin (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 0 and 1 at the beginning */
- int new_order[5] = { 1, 0, 2, 3, 4 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "0"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "1"));
-
- gtk_tree_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_swap_middle_next (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 2 and 3 in the middle that are next to each other */
- int new_order[5] = { 0, 1, 3, 2, 4 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "3"));
-
- gtk_tree_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_swap_middle_apart (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 1 and 3 in the middle that are apart from each other */
- int new_order[5] = { 0, 3, 2, 1, 4 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "1"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "3"));
-
- gtk_tree_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_swap_end (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We swap nodes 3 and 4 at the end */
- int new_order[5] = { 0, 1, 2, 4, 3 };
-
- GtkTreeIter iter_a;
- GtkTreeIter iter_b;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_a, "3"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter_b, "4"));
-
- gtk_tree_store_swap (fixture->store, &iter_a, &iter_b);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_swap_single (void)
-{
- GtkTreeIter iter;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- /* Check if swap on a store with a single node does not corrupt
- * the store.
- */
-
- gtk_tree_store_append (store, &iter, NULL);
- iter_copy = iter;
-
- gtk_tree_store_swap (store, &iter, &iter);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- g_object_unref (store);
-}
-
-/* move after */
-
-static void
-tree_store_test_move_after_from_start (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 0 after 2 */
- int new_order[5] = { 1, 2, 0, 3, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "0"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "2"));
-
- gtk_tree_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_after_next (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2 after 3 */
- int new_order[5] = { 0, 1, 3, 2, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "3"));
-
- gtk_tree_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_after_apart (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 1 after 3 */
- int new_order[5] = { 0, 2, 3, 1, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "1"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "3"));
-
- gtk_tree_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_after_end (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2 after 4 */
- int new_order[5] = { 0, 1, 3, 4, 2 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "4"));
-
- gtk_tree_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_after_from_end (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 4 after 1 */
- int new_order[5] = { 0, 1, 4, 2, 3 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "4"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "1"));
-
- gtk_tree_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_after_change_ends (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move 0 after 4, this will cause both the head and tail ends to
- * change.
- */
- int new_order[5] = { 1, 2, 3, 4, 0 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "0"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "4"));
-
- gtk_tree_store_move_after (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_after_NULL (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2, NULL should prepend */
- int new_order[5] = { 2, 0, 1, 3, 4 };
-
- GtkTreeIter iter;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
-
- gtk_tree_store_move_after (fixture->store, &iter, NULL);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_after_single (void)
-{
- GtkTreeIter iter;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- /* Check if move-after on a store with a single node does not corrupt
- * the store.
- */
-
- gtk_tree_store_append (store, &iter, NULL);
- iter_copy = iter;
-
- gtk_tree_store_move_after (store, &iter, NULL);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- gtk_tree_store_move_after (store, &iter, &iter);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- g_object_unref (store);
-}
-
-/* move before */
-
-static void
-tree_store_test_move_before_next (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 3 before 2 */
- int new_order[5] = { 0, 1, 3, 2, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "3"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "2"));
-
- gtk_tree_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_before_apart (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 1 before 3 */
- int new_order[5] = { 0, 2, 1, 3, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "1"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "3"));
-
- gtk_tree_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_before_to_start (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2 before 0 */
- int new_order[5] = { 2, 0, 1, 3, 4 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "0"));
-
- gtk_tree_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_before_from_end (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 4 before 2 (replace end) */
- int new_order[5] = { 0, 1, 4, 2, 3 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "4"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "2"));
-
- gtk_tree_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_before_change_ends (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 4 before 0 */
- int new_order[5] = { 4, 0, 1, 2, 3 };
-
- GtkTreeIter iter;
- GtkTreeIter position;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "4"));
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &position, "0"));
-
- gtk_tree_store_move_before (fixture->store, &iter, &position);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_before_NULL (TreeStore *fixture,
- gconstpointer user_data)
-{
- /* We move node 2, NULL should append */
- int new_order[5] = { 0, 1, 3, 4, 2 };
-
- GtkTreeIter iter;
-
- g_assert (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store), &iter, "2"));
-
- gtk_tree_store_move_before (fixture->store, &iter, NULL);
- check_model (fixture, new_order, -1);
-}
-
-static void
-tree_store_test_move_before_single (void)
-{
- GtkTreeIter iter;
- GtkTreeIter iter_copy;
- GtkTreeStore *store;
-
- store = gtk_tree_store_new (1, G_TYPE_INT);
-
- /* Check if move-after on a store with a single node does not corrupt
- * the store.
- */
-
- gtk_tree_store_append (store, &iter, NULL);
- iter_copy = iter;
-
- gtk_tree_store_move_before (store, &iter, NULL);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- gtk_tree_store_move_before (store, &iter, &iter);
- g_assert (iters_equal (&iter, &iter_copy));
- g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter));
- g_assert (iters_equal (&iter, &iter_copy));
-
- g_object_unref (store);
-}
-
-
-/* iter invalidation */
-
-static void
-tree_store_test_iter_previous_invalid (TreeStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &iter);
-
- g_assert (gtk_tree_model_iter_previous (GTK_TREE_MODEL (fixture->store),
- &iter) == FALSE);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &iter) == FALSE);
- g_assert (iter.stamp == 0);
-}
-
-static void
-tree_store_test_iter_next_invalid (TreeStore *fixture,
- gconstpointer user_data)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
-
- path = gtk_tree_path_new_from_indices (4, -1);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &iter, path);
- gtk_tree_path_free (path);
-
- g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store),
- &iter) == FALSE);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &iter) == FALSE);
- g_assert (iter.stamp == 0);
-}
-
-static void
-tree_store_test_iter_children_invalid (TreeStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter, child;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &iter);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &iter) == TRUE);
-
- g_assert (gtk_tree_model_iter_children (GTK_TREE_MODEL (fixture->store),
- &child, &iter) == FALSE);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &child) == FALSE);
- g_assert (child.stamp == 0);
-}
-
-static void
-tree_store_test_iter_nth_child_invalid (TreeStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter, child;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &iter);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &iter) == TRUE);
-
- g_assert (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (fixture->store),
- &child, &iter, 0) == FALSE);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &child) == FALSE);
- g_assert (child.stamp == 0);
-}
-
-static void
-tree_store_test_iter_parent_invalid (TreeStore *fixture,
- gconstpointer user_data)
-{
- GtkTreeIter iter, child;
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (fixture->store), &child);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &child) == TRUE);
-
- g_assert (gtk_tree_model_iter_parent (GTK_TREE_MODEL (fixture->store),
- &iter, &child) == FALSE);
- g_assert (gtk_tree_store_iter_is_valid (fixture->store, &iter) == FALSE);
- g_assert (iter.stamp == 0);
-}
-
-/* specific bugs */
-static void
-specific_bug_77977 (void)
-{
- GtkTreeStore *tree_store;
- GtkTreeIter iter1, iter2, iter3;
- GtkTreePath *path;
- GtkTreeRowReference *row_ref;
-
- /* Stripped down version of test case for bug 77977 by Damon Chaplin */
-
- g_test_bug ("77977");
-
- tree_store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (tree_store, &iter1, NULL);
- gtk_tree_store_set (tree_store, &iter1, 0, "Window1", -1);
-
- gtk_tree_store_append (tree_store, &iter2, &iter1);
- gtk_tree_store_set (tree_store, &iter2, 0, "Table1", -1);
-
- gtk_tree_store_append (tree_store, &iter3, &iter2);
- gtk_tree_store_set (tree_store, &iter3, 0, "Button1", -1);
-
- path = gtk_tree_path_new_from_indices (0, 0, 0, -1);
- row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (tree_store), path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_remove (tree_store, &iter1);
-
- gtk_tree_row_reference_free (row_ref);
- g_object_unref (tree_store);
-}
-
-/* main */
-
-void
-register_tree_store_tests (void)
-{
- /* insertion */
- g_test_add_func ("/TreeStore/insert-high-values",
- tree_store_test_insert_high_values);
- g_test_add_func ("/TreeStore/append",
- tree_store_test_append);
- g_test_add_func ("/TreeStore/prepend",
- tree_store_test_prepend);
- g_test_add_func ("/TreeStore/insert-after",
- tree_store_test_insert_after);
- g_test_add_func ("/TreeStore/insert-after-NULL",
- tree_store_test_insert_after_NULL);
- g_test_add_func ("/TreeStore/insert-before",
- tree_store_test_insert_before);
- g_test_add_func ("/TreeStore/insert-before-NULL",
- tree_store_test_insert_before_NULL);
-
- /* setting values (FIXME) */
- g_test_add_func ("/TreeStore/set-gvalue-to-transform",
- tree_store_set_gvalue_to_transform);
-
- /* removal */
- g_test_add ("/TreeStore/remove-begin", TreeStore, NULL,
- tree_store_setup, tree_store_test_remove_begin,
- tree_store_teardown);
- g_test_add ("/TreeStore/remove-middle", TreeStore, NULL,
- tree_store_setup, tree_store_test_remove_middle,
- tree_store_teardown);
- g_test_add ("/TreeStore/remove-end", TreeStore, NULL,
- tree_store_setup, tree_store_test_remove_end,
- tree_store_teardown);
-
- g_test_add ("/TreeStore/clear", TreeStore, NULL,
- tree_store_setup, tree_store_test_clear,
- tree_store_teardown);
-
- /* reordering */
- g_test_add ("/TreeStore/reorder", TreeStore, NULL,
- tree_store_setup, tree_store_test_reorder,
- tree_store_teardown);
-
- /* swapping */
- g_test_add ("/TreeStore/swap-begin", TreeStore, NULL,
- tree_store_setup, tree_store_test_swap_begin,
- tree_store_teardown);
- g_test_add ("/TreeStore/swap-middle-next", TreeStore, NULL,
- tree_store_setup, tree_store_test_swap_middle_next,
- tree_store_teardown);
- g_test_add ("/TreeStore/swap-middle-apart", TreeStore, NULL,
- tree_store_setup, tree_store_test_swap_middle_apart,
- tree_store_teardown);
- g_test_add ("/TreeStore/swap-end", TreeStore, NULL,
- tree_store_setup, tree_store_test_swap_end,
- tree_store_teardown);
- g_test_add_func ("/TreeStore/swap-single",
- tree_store_test_swap_single);
-
- /* moving */
- g_test_add ("/TreeStore/move-after-from-start", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_after_from_start,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-after-next", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_after_next,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-after-apart", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_after_apart,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-after-end", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_after_end,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-after-from-end", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_after_from_end,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-after-change-ends", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_after_change_ends,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-after-NULL", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_after_NULL,
- tree_store_teardown);
- g_test_add_func ("/TreeStore/move-after-single",
- tree_store_test_move_after_single);
-
- g_test_add ("/TreeStore/move-before-next", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_before_next,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-before-apart", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_before_apart,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-before-to-start", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_before_to_start,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-before-from-end", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_before_from_end,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-before-change-ends", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_before_change_ends,
- tree_store_teardown);
- g_test_add ("/TreeStore/move-before-NULL", TreeStore, NULL,
- tree_store_setup, tree_store_test_move_before_NULL,
- tree_store_teardown);
- g_test_add_func ("/TreeStore/move-before-single",
- tree_store_test_move_before_single);
-
- /* iter invalidation */
- g_test_add ("/TreeStore/iter-prev-invalid", TreeStore, NULL,
- tree_store_setup, tree_store_test_iter_previous_invalid,
- tree_store_teardown);
- g_test_add ("/TreeStore/iter-next-invalid", TreeStore, NULL,
- tree_store_setup, tree_store_test_iter_next_invalid,
- tree_store_teardown);
- g_test_add ("/TreeStore/iter-children-invalid", TreeStore, NULL,
- tree_store_setup, tree_store_test_iter_children_invalid,
- tree_store_teardown);
- g_test_add ("/TreeStore/iter-nth-child-invalid", TreeStore, NULL,
- tree_store_setup, tree_store_test_iter_nth_child_invalid,
- tree_store_teardown);
- g_test_add ("/TreeStore/iter-parent-invalid", TreeStore, NULL,
- tree_store_setup, tree_store_test_iter_parent_invalid,
- tree_store_teardown);
-
- /* specific bugs */
- g_test_add_func ("/TreeStore/bug-77977", specific_bug_77977);
-}
diff --git a/gtk/tests/treeview-scrolling.c b/gtk/tests/treeview-scrolling.c
deleted file mode 100644
index 77dca9abc4..0000000000
--- a/gtk/tests/treeview-scrolling.c
+++ /dev/null
@@ -1,1494 +0,0 @@
-/* Scrolling test suite for GtkTreeView
- * Copyright (C) 2006 Kristian Rietveld <kris@gtk.org>
- * Copyright (C) 2007 Imendio AB, Kristian Rietveld
- * Copyright (C) 2009 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Original v1.0 -- December 26, 2006
- * Conversion to GLib/GTK+ test framework during December, 2007
- */
-
-
-#include <gtk/gtk.h>
-#include <unistd.h>
-#include <math.h>
-
-#define VIEW_WIDTH 320
-#define VIEW_HEIGHT 240
-
-#define N_ROWS 1000
-#define BIG_N_ROWS N_ROWS * 100
-
-/*
- * To do:
- * - Test that nothing happens if the row is fully visible.
- * - The tests are dependent on the theme/font (size measurements,
- * chosen paths).
- * - Convert to proper GTK+ coding style.
- * - Briefly test scrolling in tree stores as well.
- *
- * Important:
- * - For tests with "mixed height" models, you must ensure that
- * there are only two heights used in total and that the rows with
- * height A and B are strictly alternating. The model creation
- * functions already do this for you, but take this into account
- * when you write a unit test that adds rows to such a created
- * model, you must follow this rule otherwise things will break.
- */
-
-
-/* Constructing models for testing */
-static GtkTreeModel *
-create_model (gboolean constant)
-{
- int i;
-
- GtkTreeIter iter;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_STRING);
-
- for (i = 0; i < N_ROWS; i++) {
- gtk_list_store_append (store, &iter);
- if (constant || i % 2 == 0)
- gtk_list_store_set (store, &iter, 0, "Foo", -1);
- else
- gtk_list_store_set (store, &iter, 0, "Sliff\nSloff\nBleh", -1);
- }
-
- return GTK_TREE_MODEL (store);
-}
-
-static GtkTreeModel *
-create_big_model (gboolean constant)
-{
- int i;
-
- GtkTreeIter iter;
- GtkListStore *store;
-
- store = gtk_list_store_new (1, G_TYPE_STRING);
-
- for (i = 0; i < BIG_N_ROWS; i++) {
- gtk_list_store_append (store, &iter);
- if (constant || i % 2 == 0)
- gtk_list_store_set (store, &iter, 0, "Foo", -1);
- else
- gtk_list_store_set (store, &iter, 0, "Sliff\nSloff\nBleh", -1);
- }
-
- return GTK_TREE_MODEL (store);
-}
-
-/*
- * Fixtures
- */
-
-typedef struct
-{
- GtkWidget *window;
- GtkWidget *tree_view;
-}
-ScrollFixture;
-
-static void
-scroll_fixture_setup (ScrollFixture *fixture,
- GtkTreeModel *model,
- gconstpointer test_data)
-{
- GtkWidget *sw;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
-
- fixture->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_ALWAYS);
- gtk_container_add (GTK_CONTAINER (fixture->window), sw);
-
- fixture->tree_view = gtk_tree_view_new_with_model (model);
- g_object_unref (model);
- gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (sw), VIEW_WIDTH);
- gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (sw), VIEW_HEIGHT);
- gtk_widget_set_size_request (fixture->tree_view, VIEW_WIDTH, VIEW_HEIGHT);
-
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "editable", TRUE, NULL);
- column = gtk_tree_view_column_new_with_attributes ("Title",
- renderer,
- "text", 0,
- NULL);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (fixture->tree_view), column);
- gtk_container_add (GTK_CONTAINER (sw), fixture->tree_view);
-}
-
-/* sets up a fixture with a model with constant row heights */
-static void
-scroll_fixture_constant_setup (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- scroll_fixture_setup (fixture, create_model (TRUE), test_data);
-}
-
-/* sets up a fixture with a model with varying row heights */
-static void
-scroll_fixture_mixed_setup (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- scroll_fixture_setup (fixture, create_model (FALSE), test_data);
-}
-
-/* sets up a fixture with a large model with constant row heights */
-static void
-scroll_fixture_constant_big_setup (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- scroll_fixture_setup (fixture, create_big_model (TRUE), test_data);
-}
-
-/* sets up a fixture with a large model with varying row heights */
-static void
-scroll_fixture_mixed_big_setup (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- scroll_fixture_setup (fixture, create_big_model (FALSE), test_data);
-}
-
-/* sets up a fixture with only a single row for the "single row scroll" test */
-static void
-scroll_fixture_single_setup (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreeStore *store;
- GtkTreeIter iter, child;
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Foo", -1);
-
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, "Two\nLines", -1);
-
- /* The teardown will also destroy the model */
- scroll_fixture_setup (fixture, GTK_TREE_MODEL (store), test_data);
-}
-
-/* sets up a fixture with a tree store */
-static void
-scroll_fixture_tree_setup (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreeStore *store;
- GtkTreeIter iter, child;
- int i;
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Root node", -1);
-
- for (i = 0; i < 5; i++) {
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, "Child node", -1);
- }
-
- for (i = 0; i < 5; i++) {
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Other node", -1);
- }
-
- /* The teardown will also destroy the model */
- scroll_fixture_setup (fixture, GTK_TREE_MODEL (store), test_data);
-}
-
-static void
-scroll_fixture_mixed_tree_setup (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreeStore *store;
- GtkTreeIter iter, child;
- int i;
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Root\nnode", -1);
-
- for (i = 0; i < 5; i++) {
- gtk_tree_store_append (store, &child, &iter);
- if (i % 2 != 0)
- gtk_tree_store_set (store, &child, 0, "Child node", -1);
- else
- gtk_tree_store_set (store, &child,
- 0, "Child\nnode", -1);
- }
-
- for (i = 0; i < 5; i++) {
- gtk_tree_store_append (store, &iter, NULL);
- if (i % 2 == 0)
- gtk_tree_store_set (store, &iter, 0, "Other node", -1);
- else
- gtk_tree_store_set (store, &iter, 0, "Other\nnode", -1);
- }
-
- /* The teardown will also destroy the model */
- scroll_fixture_setup (fixture, GTK_TREE_MODEL (store), test_data);
-}
-
-static void
-scroll_fixture_teardown (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- gtk_widget_destroy (fixture->window);
-}
-
-/*
- * Position check and helpers.
- */
-enum Pos
-{
- POS_TOP,
- POS_CENTER,
- POS_BOTTOM
-};
-
-static int
-get_row_start_for_index (GtkTreeView *tree_view, int index)
-{
- gint height1, height2;
- gint row_start;
- GtkTreePath *path;
- GdkRectangle rect;
-
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_get_background_area (tree_view, path, NULL, &rect);
- height1 = rect.height;
-
- gtk_tree_path_next (path);
- gtk_tree_view_get_background_area (tree_view, path, NULL, &rect);
- height2 = rect.height;
- gtk_tree_path_free (path);
-
- row_start = (index / 2) * height1 + (index / 2) * height2;
- if (index % 2)
- row_start += height1;
-
- return row_start;
-}
-
-static enum Pos
-get_pos_from_path (GtkTreeView *tree_view,
- GtkTreePath *path,
- gdouble row_height,
- GtkAdjustment *vadjustment)
-{
- int row_start;
-
- row_start = get_row_start_for_index (tree_view,
- gtk_tree_path_get_indices (path)[0]);
-
- if (row_start + row_height < gtk_adjustment_get_page_size (vadjustment))
- return POS_TOP;
-
- if (row_start >= gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment))
- return POS_BOTTOM;
-
- return POS_CENTER;
-}
-
-static void
-assert_position_with_align (GtkTreeView *tree_view,
- enum Pos pos,
- gint row_y,
- gint row_start,
- gdouble row_height,
- gdouble row_align)
-{
- GtkAdjustment *vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view));
-
- /* Switch on row-align: 0.0, 0.5, 1.0 */
- switch ((int)(row_align * 2.)) {
- case 0:
- if (pos == POS_TOP || pos == POS_CENTER) {
- /* The row in question is the first row
- * in the view.
- * - rect.y should be zero
- * - dy should be equal to the top
- * y coordinate of the row.
- */
- g_assert (row_y == 0);
- g_assert (gtk_adjustment_get_value (vadjustment) == row_start);
- } else {
- /* The row can be anywhere at the last
- * page of the tree view.
- * - dy is set to the start of the
- * last page.
- */
- g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
- }
- break;
-
- case 1:
- /* 0.5 */
- if (pos == POS_TOP
- && row_start < (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2) {
- /* For the first half of the top view we can't
- * center the row in the view, instead we
- * show the first page.
- * - dy should be zero
- */
- g_assert (gtk_adjustment_get_value (vadjustment) == 0);
- } else if (pos == POS_BOTTOM
- && row_start + row_height >= gtk_adjustment_get_upper (vadjustment) - (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2) {
- /* For the last half of the bottom view we
- * can't center the row in the view, instead
- * we show the last page.
- * - dy should be the start of the
- * last page.
- */
- g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
- } else {
- /* The row is located in the middle of
- * the view.
- * - top y coordinate is equal to
- * middle of the view minus
- * half the height of the row.
- * (ie. the row's center is at the
- * center of the view).
- */
- gdouble middle = (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2.0;
- g_assert (row_y == ceil (middle) || row_y == floor (middle));
- }
- break;
-
- case 2:
- /* 1.0 */
- if (pos == POS_TOP) {
- /* The row can be anywhere on the
- * first page of the tree view.
- * - dy is zero.
- */
- g_assert (gtk_adjustment_get_value (vadjustment) == 0);
- } else if (pos == POS_CENTER || pos == POS_BOTTOM) {
- /* The row is the last row visible in the
- * view.
- * - rect.y is set to the top of the
- * last row.
- * - row_start is greater than page_size
- * (ie we are not on the first page).
- * - dy is greater than zero
- */
- g_assert (row_start >= gtk_adjustment_get_page_size (vadjustment)
- || row_start + row_height >= gtk_adjustment_get_page_size (vadjustment));
- g_assert (row_y == gtk_adjustment_get_page_size (vadjustment) - row_height);
- }
- break;
- }
-}
-
-static void
-assert_position_without_align (GtkTreeView *tree_view,
- gdouble row_start,
- gdouble row_height)
-{
- GtkAdjustment *vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view));
-
- /* Without align the tree view does as less work as possible,
- * so basically we only have to check whether the row
- * is visible on the screen.
- */
- g_assert (gtk_adjustment_get_value (vadjustment) <= row_start);
- g_assert (gtk_adjustment_get_value (vadjustment) + gtk_adjustment_get_page_size (vadjustment) >= row_start + row_height);
-}
-
-static void
-test_position (GtkTreeView *tree_view,
- GtkTreePath *path,
- gboolean use_align,
- gdouble row_align)
-{
- gint pos;
- gchar *path_str;
- GdkRectangle rect;
- GtkTreeModel *model;
- gint row_start;
-
- /* Get the location of the path we scrolled to */
- gtk_tree_view_get_background_area (GTK_TREE_VIEW (tree_view),
- path, NULL, &rect);
-
- row_start = get_row_start_for_index (GTK_TREE_VIEW (tree_view),
- gtk_tree_path_get_indices (path)[0]);
-
- /* Ugh */
- pos = get_pos_from_path (GTK_TREE_VIEW (tree_view),
- path, rect.height,
- gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view)));
-
- /* This is only tested for during test_single() */
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
- if (gtk_tree_model_iter_n_children (model, NULL) == 1) {
- GtkAllocation allocation;
- GtkTreePath *tmppath;
-
- /* Test nothing is dangling at the bottom; read
- * description for test_single() for more information.
- */
-
- /* FIXME: hardcoded width */
- gtk_widget_get_allocation (GTK_WIDGET (tree_view), &allocation);
- if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (tree_view), 0, allocation.height - 30, &tmppath, NULL, NULL, NULL)) {
- g_assert_not_reached ();
- gtk_tree_path_free (tmppath);
- }
- }
-
- path_str = gtk_tree_path_to_string (path);
- if (use_align) {
- assert_position_with_align (tree_view, pos, rect.y,
- row_start, rect.height, row_align);
- } else {
- assert_position_without_align (tree_view, row_start, rect.height);
- }
-
- g_free (path_str);
-}
-
-/*
- * Scrolling code
- */
-
-
-/* Testing scrolling to various positions with various alignments */
-
-static void
-ensure_layout (void)
-{
- /* HACK: sleep for more than one frame, to give the paint clock
- * time to prepare the new layout */
- g_usleep (100 * 1000);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-}
-
-static void
-scroll (ScrollFixture *fixture,
- GtkTreePath *path,
- gboolean use_align,
- gdouble row_align)
-{
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (fixture->tree_view), path,
- NULL, FALSE);
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (fixture->tree_view),
- path, NULL,
- use_align, row_align, 0.0);
-
- gtk_widget_show_all (fixture->window);
-
- ensure_layout ();
- test_position (GTK_TREE_VIEW (fixture->tree_view), path,
- use_align, row_align);
-}
-
-static void
-scroll_no_align (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll (fixture, path, FALSE, 0.0);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_align_0_0 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll (fixture, path, TRUE, 0.0);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_align_0_5 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll (fixture, path, TRUE, 0.5);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_align_1_0 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll (fixture, path, TRUE, 1.0);
- gtk_tree_path_free (path);
-}
-
-
-static void
-scroll_after_realize (ScrollFixture *fixture,
- GtkTreePath *path,
- gboolean use_align,
- gdouble row_align)
-{
- gtk_widget_show_all (fixture->window);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (fixture->tree_view), path,
- NULL, FALSE);
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (fixture->tree_view),
- path, NULL,
- use_align, row_align, 0.0);
-
- ensure_layout ();
- test_position (GTK_TREE_VIEW (fixture->tree_view), path,
- use_align, row_align);
-}
-
-static void
-scroll_after_no_align (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_after_realize (fixture, path, FALSE, 0.0);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_after_align_0_0 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_after_realize (fixture, path, TRUE, 0.0);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_after_align_0_5 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_after_realize (fixture, path, TRUE, 0.5);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_after_align_1_0 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_after_realize (fixture, path, TRUE, 1.0);
- gtk_tree_path_free (path);
-}
-
-
-static void
-scroll_both_realize (ScrollFixture *fixture,
- GtkTreePath *path,
- gboolean use_align,
- gdouble row_align)
-{
- GtkTreePath *end;
-
- gtk_widget_show_all (fixture->window);
-
- /* Scroll to end */
- end = gtk_tree_path_new_from_indices (999, -1);
-
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (fixture->tree_view), end,
- NULL, FALSE);
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (fixture->tree_view),
- end, NULL,
- use_align, row_align, 0.0);
- gtk_tree_path_free (end);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Scroll to final position */
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (fixture->tree_view), path,
- NULL, FALSE);
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (fixture->tree_view),
- path, NULL,
- use_align, row_align, 0.0);
-
- ensure_layout ();
- test_position (GTK_TREE_VIEW (fixture->tree_view), path,
- use_align, row_align);
-}
-
-static void
-scroll_both_no_align (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_both_realize (fixture, path, FALSE, 0.0);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_both_align_0_0 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_both_realize (fixture, path, TRUE, 0.0);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_both_align_0_5 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_both_realize (fixture, path, TRUE, 0.5);
- gtk_tree_path_free (path);
-}
-
-static void
-scroll_both_align_1_0 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new_from_string (test_data);
- scroll_both_realize (fixture, path, TRUE, 1.0);
- gtk_tree_path_free (path);
-}
-
-/* Testing scrolling to a newly created row */
-static void
-create_new_row (GtkListStore *store,
- int n,
- GtkTreeIter *iter)
-{
- switch (n) {
- case 0:
- /* Prepend a row */
- gtk_list_store_prepend (store, iter);
- break;
-
- case 3:
- /* Add a row in the middle of the visible area */
- gtk_list_store_insert (store, iter, 3);
- break;
-
- case 4:
- /* Add a row in the middle of the visible area */
- gtk_list_store_insert (store, iter, 4);
- break;
-
- case 5:
- /* Add a row which is not completely visible */
- gtk_list_store_insert (store, iter, 5);
- break;
-
- case 8:
- /* Add a row which is not completely visible */
- gtk_list_store_insert (store, iter, 8);
- break;
-
- case 500:
- /* Add a row in the middle */
- gtk_list_store_insert (store, iter, 500);
- break;
-
- case 999:
- /* Append a row */
- gtk_list_store_append (store, iter);
- break;
- }
-
- gtk_list_store_set (store, iter, 0, "New...", -1);
-}
-
-static void
-scroll_new_row_editing_started (GtkCellRenderer *cell,
- GtkCellEditable *editable,
- const char *path,
- gpointer user_data)
-{
- GtkWidget **widget = user_data;
-
- *widget = GTK_WIDGET (editable);
-}
-
-static void
-test_editable_position (GtkWidget *tree_view,
- GtkWidget *editable,
- GtkTreePath *cursor_path)
-{
- GtkAllocation allocation;
- GdkRectangle rect;
-
- gtk_tree_view_get_background_area (GTK_TREE_VIEW (tree_view),
- cursor_path, NULL, &rect);
-
- /* There are all in bin_window coordinates */
- gtk_widget_get_allocation (editable, &allocation);
- g_assert (allocation.y == rect.y + ((rect.height - allocation.height) / 2));
-}
-
-static void
-scroll_new_row (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreeIter scroll_iter;
- GtkTreePath *scroll_path;
- GtkTreeModel *model;
- GList *renderers;
- GtkTreeViewColumn *column;
- GtkWidget *editable;
-
- /* The aim of this test is creating a new row at several places,
- * and immediately put the cursor on it. TreeView should correctly
- * scroll to the row and show the editable widget.
- *
- * See #81627.
- */
-
- g_test_bug ("81627");
-
- gtk_widget_show_all (fixture->window);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Create the new row and scroll to it */
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view));
- create_new_row (GTK_LIST_STORE (model), GPOINTER_TO_INT (test_data),
- &scroll_iter);
-
- /* Set up a signal handler to acquire the editable widget */
- column = gtk_tree_view_get_column (GTK_TREE_VIEW (fixture->tree_view), 0);
- renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
-
- g_signal_connect (G_OBJECT (renderers->data), "editing-started",
- G_CALLBACK (scroll_new_row_editing_started),
- &editable);
-
- /* Now set the cursor on the path and start editing */
- scroll_path = gtk_tree_model_get_path (model, &scroll_iter);
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (fixture->tree_view),
- scroll_path,
- column,
- TRUE);
-
- ensure_layout ();
-
- /* Test position */
- test_position (GTK_TREE_VIEW (fixture->tree_view), scroll_path,
- FALSE, 0.0);
- test_editable_position (fixture->tree_view, editable, scroll_path);
-
- gtk_tree_path_free (scroll_path);
-}
-
-static void
-scroll_new_row_tree (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreeModel *model;
- GtkAdjustment *vadjustment;
- int i;
-
- /* The goal of this test is to append new rows at the end of a tree
- * store and immediately scroll to them. If there is a parent
- * node with a couple of childs in the "area above" to explore,
- * this used to lead to unexpected results due to a bug.
- *
- * This issue has been reported by Miroslav Rajcic on
- * gtk-app-devel-list:
- * http://mail.gnome.org/archives/gtk-app-devel-list/2008-December/msg00068.html
- */
-
- gtk_widget_show_all (fixture->window);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (fixture->tree_view));
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view));
- vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (fixture->tree_view));
-
- for (i = 0; i < 5; i++) {
- GtkTreeIter scroll_iter;
- GtkTreePath *scroll_path;
-
- gtk_tree_store_append (GTK_TREE_STORE (model), &scroll_iter,
- NULL);
- gtk_tree_store_set (GTK_TREE_STORE (model), &scroll_iter,
- 0, "New node", -1);
-
- scroll_path = gtk_tree_model_get_path (model, &scroll_iter);
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (fixture->tree_view),
- scroll_path, NULL, FALSE, 0.0, 0.0);
- gtk_tree_path_free (scroll_path);
-
- ensure_layout ();
-
- /* Test position, the scroll bar must be at the end */
- g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
- }
-}
-
-/* Test for GNOME bugzilla bug 359231; tests "recovery when removing a bunch of
- * rows at the bottom.
- */
-static void
-test_bug316689 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- GtkTreeIter iter;
- GtkTreePath *path;
- GtkAdjustment *vadjustment;
- GtkTreeModel *model;
-
- /* The aim of this test is to scroll to the bottom of a TreeView,
- * remove at least one page_size of items and check if TreeView
- * correctly corrects the scroll bar (else they will look "broken").
- *
- * See #316689.
- */
-
- g_test_bug ("316689");
-
- /* Scroll to some place close to the end */
- path = gtk_tree_path_new_from_indices (N_ROWS - 4, -1);
- scroll (fixture, path, FALSE, 0.0);
- gtk_tree_path_free (path);
-
- /* No need for a while events pending loop here, scroll() does this for us.
- *
- * We now remove a bunch of rows, wait for events to process and then
- * check the adjustments to see if the TreeView gracefully recovered.
- */
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view));
-
- while (gtk_tree_model_iter_nth_child (model, &iter, NULL, N_ROWS - 15))
- gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (fixture->tree_view));
-
- g_assert (gtk_adjustment_get_value (vadjustment) + gtk_adjustment_get_page_size (vadjustment) <= gtk_adjustment_get_upper (vadjustment));
- g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
-}
-
-
-/* Test for GNOME bugzilla bug 359231 */
-static void
-test_bug359231 (void)
-{
- int i;
- int height1, height2;
- GtkTreePath *path;
- GtkTreeIter iter, child;
- GtkTreeStore *store;
- GdkRectangle rect;
- ScrollFixture *fixture;
-
- /* See #359231. */
- g_test_bug ("359231");
-
- /* Create model (GtkTreeStore in this case) */
- store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Foo", -1);
-
- for (i = 0; i < 4; i++) {
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, "Two\nLines", -1);
- }
-
- fixture = g_new0 (ScrollFixture, 1);
- scroll_fixture_setup (fixture, GTK_TREE_MODEL (store), NULL);
- gtk_widget_show_all (fixture->window);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Prepend some rows at the top, expand */
- gtk_tree_store_prepend (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Foo", -1);
-
- gtk_tree_store_prepend (store, &child, &iter);
- gtk_tree_store_set (store, &child, 0, "Two\nLines", -1);
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (fixture->tree_view));
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Test if height of row 0:0 is correct */
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_get_background_area (GTK_TREE_VIEW (fixture->tree_view),
- path, NULL, &rect);
- height1 = rect.height;
-
- gtk_tree_path_down (path);
- gtk_tree_view_get_background_area (GTK_TREE_VIEW (fixture->tree_view),
- path, NULL, &rect);
- height2 = rect.height;
- gtk_tree_path_free (path);
-
- g_assert (height2 > height1);
-
- /* Clean up; the tear down also cleans up the model */
- scroll_fixture_teardown (fixture, NULL);
-}
-
-/* Test for GNOME bugzilla bug 93584. We add 150 rows to an existing
- * small model, and scroll to one of these with alignment.
- */
-static void
-test_bug93584 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- int row, i;
- GtkTreeStore *store;
- GtkTreePath *path;
-
- g_test_bug ("93584");
-
- /* Mimic state as in original test case */
- g_signal_connect (G_OBJECT (fixture->tree_view), "realize",
- G_CALLBACK (gtk_tree_view_expand_all), NULL);
- gtk_widget_show_all (fixture->window);
-
- store = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view)));
-
- /* Add 150 rows */
- for (i = 0; i < 150; i++) {
- GtkTreeIter iter;
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Row", -1);
- }
-
- row = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
- row -= 20;
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- path = gtk_tree_path_new_from_indices (row, -1);
- scroll (fixture, path, TRUE, 0.5);
- gtk_tree_path_free (path);
-}
-
-/* GNOME bugzilla bug 111500. Expand a row and immediately scroll
- * to its first child. Make sure that expansion happens in currently
- * invisible area.
- */
-static void
-test_bug111500 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- int i, len;
- GtkTreeStore *store;
- GtkTreeIter parent;
- GtkTreePath *path;
-
- g_test_bug ("111500");
-
- gtk_widget_show_all (fixture->window);
-
- /* Make sure all events have been processed and the window
- * is visible.
- */
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Further prepare model */
- store = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view)));
-
- for (i = 0; i < 15; i++) {
- GtkTreeIter iter;
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, "Other node", -1);
- }
-
- len = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
- gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &parent,
- NULL, len - 1);
-
- for (i = 0; i < 5; i++) {
- GtkTreeIter iter;
-
- gtk_tree_store_append (store, &iter, &parent);
- gtk_tree_store_set (store, &iter, 0, "Row", -1);
- }
-
- path = gtk_tree_path_new_from_indices (len - 1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view),
- path, FALSE);
-
- gtk_tree_path_down (path);
-
- scroll (fixture, path, FALSE, 0.5);
- gtk_tree_path_free (path);
-}
-
-static void
-test_bug111500_mixed (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- int i, len;
- GtkTreeStore *store;
- GtkTreeIter parent;
- GtkTreePath *path;
-
- g_test_bug ("111500");
-
- gtk_widget_show_all (fixture->window);
-
- /* Make sure all events have been processed and the window
- * is visible.
- */
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- /* Further prepare model */
- store = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view)));
-
- for (i = 0; i < 15; i++) {
- GtkTreeIter iter;
-
- gtk_tree_store_append (store, &iter, NULL);
- if (i % 2 == 0)
- gtk_tree_store_set (store, &iter, 0, "Other node", -1);
- else
- gtk_tree_store_set (store, &iter, 0, "Other\nnode", -1);
- }
-
- len = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
- gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &parent,
- NULL, len - 1);
-
- for (i = 0; i < 5; i++) {
- GtkTreeIter iter;
-
- gtk_tree_store_append (store, &iter, &parent);
- if (i % 2 != 0)
- gtk_tree_store_set (store, &iter, 0, "Row", -1);
- else
- gtk_tree_store_set (store, &iter, 0, "Row\nRow", -1);
- }
-
- path = gtk_tree_path_new_from_indices (len - 1, -1);
- gtk_tree_view_expand_row (GTK_TREE_VIEW (fixture->tree_view),
- path, FALSE);
-
- gtk_tree_path_down (path);
-
- scroll (fixture, path, FALSE, 0.5);
- gtk_tree_path_free (path);
-}
-
-/* Test for GNOME bugzilla bug 163214. Invalidate a couple of rows,
- * then scroll to one of these.
- */
-static void
-test_bug163214 (ScrollFixture *fixture,
- gconstpointer test_data)
-{
- int i;
- GtkListStore *store;
- GtkTreePath *path;
-
- g_test_bug ("163214");
-
- gtk_widget_show_all (fixture->window);
-
- /* Make sure all events have been processed and the window
- * is visible.
- */
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view)));
-
- /* Invalidate a page of rows */
- for (i = 100; i < 110; i++) {
- GtkTreeIter iter;
-
- gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter,
- NULL, i);
- gtk_list_store_set (store, &iter, 0, "Row", -1);
- }
-
- /* Then scroll to that page. */
- path = gtk_tree_path_new_from_indices (105, -1);
- scroll (fixture, path, TRUE, 0.5);
- gtk_tree_path_free (path);
-
- /* Make sure all events have been processed and the window
- * is visible.
- */
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view)));
-
- /* Invalidate a page of rows */
- for (i = 300; i < 310; i++) {
- GtkTreeIter iter;
-
- gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter,
- NULL, i);
- gtk_list_store_set (store, &iter, 0, "Row", -1);
- }
-
- /* Then scroll to the first row */
- path = gtk_tree_path_new_from_indices (0, -1);
- scroll (fixture, path, TRUE, 0.5);
- gtk_tree_path_free (path);
-}
-
-/* Infrastructure for automatically adding tests */
-enum
-{
- BEFORE,
- AFTER,
- BOTH
-};
-
-static const char *
-test_type_string (int test_type)
-{
- switch (test_type) {
- case BEFORE:
- return "before-realize";
-
- case AFTER:
- return "after-realize";
-
- case BOTH:
- return "both";
- }
-
- return "???";
-}
-
-static char *
-align_string (gboolean use_align,
- gdouble row_align)
-{
- char *ret;
-
- if (!use_align)
- return g_strdup ("no-align");
-
- ret = g_strdup_printf ("align-%1.1f", row_align);
- return ret;
-}
-
-static void
-add_test (const char *path,
- gboolean mixed,
- int test_type,
- gboolean use_align,
- gdouble row_align,
- void (* setup) (ScrollFixture *, gconstpointer),
- void (* scroll_func) (ScrollFixture *, gconstpointer))
-{
- gchar *test_path;
- gchar *align;
-
- align = align_string (use_align, row_align);
-
- test_path = g_strdup_printf ("/TreeView/scrolling/%s/%s-height/path-%s-%s",
- test_type_string (test_type),
- mixed ? "mixed" : "constant",
- path, align);
- g_free (align);
-
- g_test_add (test_path, ScrollFixture, path,
- setup, scroll_func, scroll_fixture_teardown);
-
- g_free (test_path);
-}
-
-static void
-add_tests (gboolean mixed,
- int test_type,
- gboolean use_align,
- gdouble row_align,
- void (*scroll_func) (ScrollFixture *, gconstpointer))
-{
- void (* setup) (ScrollFixture *, gconstpointer);
-
- if (mixed)
- setup = scroll_fixture_mixed_setup;
- else
- setup = scroll_fixture_constant_setup;
-
- add_test ("0", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("2", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("5", mixed, test_type, use_align, row_align, setup, scroll_func);
- /* We scroll to 8 to test a partial visible row. The 8 is
- * based on my font setting of "Vera Sans 11" and
- * the separators set to 0. (This should be made dynamic; FIXME).
- */
- add_test ("8", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("10", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("250", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("500", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("750", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("990", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("991", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("995", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("997", mixed, test_type, use_align, row_align, setup, scroll_func);
- add_test ("999", mixed, test_type, use_align, row_align, setup, scroll_func);
-}
-
-int
-main (int argc, char **argv)
-{
- gtk_test_init (&argc, &argv);
-
- /* Scrolls before realization */
- add_tests (FALSE, BEFORE, FALSE, 0.0, scroll_no_align);
- if (g_test_thorough ())
- add_tests (TRUE, BEFORE, FALSE, 0.0, scroll_no_align);
-
- add_tests (FALSE, BEFORE, TRUE, 0.0, scroll_align_0_0);
- if (g_test_thorough ())
- add_tests (TRUE, BEFORE, TRUE, 0.0, scroll_align_0_0);
-
- add_tests (FALSE, BEFORE, TRUE, 0.5, scroll_align_0_5);
- if (g_test_thorough ())
- add_tests (TRUE, BEFORE, TRUE, 0.5, scroll_align_0_5);
-
- add_tests (FALSE, BEFORE, TRUE, 1.0, scroll_align_1_0);
- if (g_test_thorough ())
- add_tests (TRUE, BEFORE, TRUE, 1.0, scroll_align_1_0);
-
- /* Scrolls after realization */
- add_tests (FALSE, AFTER, FALSE, 0.0, scroll_after_no_align);
- if (g_test_thorough ())
- add_tests (TRUE, AFTER, FALSE, 0.0, scroll_after_no_align);
-
- add_tests (FALSE, AFTER, TRUE, 0.0, scroll_after_align_0_0);
- if (g_test_thorough ())
- add_tests (TRUE, AFTER, TRUE, 0.0, scroll_after_align_0_0);
-
- add_tests (FALSE, AFTER, TRUE, 0.5, scroll_after_align_0_5);
- if (g_test_thorough ())
- add_tests (TRUE, AFTER, TRUE, 0.5, scroll_after_align_0_5);
-
- add_tests (FALSE, AFTER, TRUE, 1.0, scroll_after_align_1_0);
- if (g_test_thorough ())
- add_tests (TRUE, AFTER, TRUE, 1.0, scroll_after_align_1_0);
-
- /* Scroll to end before realization, to a real position after */
- if (g_test_thorough ()) {
- add_tests (FALSE, BOTH, FALSE, 0.0, scroll_both_no_align);
- add_tests (TRUE, BOTH, FALSE, 0.0, scroll_both_no_align);
-
- add_tests (FALSE, BOTH, TRUE, 0.0, scroll_both_align_0_0);
- add_tests (TRUE, BOTH, TRUE, 0.0, scroll_both_align_0_0);
-
- add_tests (FALSE, BOTH, TRUE, 0.5, scroll_both_align_0_5);
- add_tests (TRUE, BOTH, TRUE, 0.5, scroll_both_align_0_5);
-
- add_tests (FALSE, BOTH, TRUE, 1.0, scroll_both_align_1_0);
- add_tests (TRUE, BOTH, TRUE, 1.0, scroll_both_align_1_0);
- }
-
- /* Test different alignments in view with single row */
- g_test_add ("/TreeView/scrolling/single-row/no-align",
- ScrollFixture, "0",
- scroll_fixture_single_setup,
- scroll_no_align,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/single-row/align-0.0",
- ScrollFixture, "0",
- scroll_fixture_single_setup,
- scroll_align_0_0,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/single-row/align-0.5",
- ScrollFixture, "0",
- scroll_fixture_single_setup,
- scroll_align_0_5,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/single-row/align-1.0",
- ScrollFixture, "0",
- scroll_fixture_single_setup,
- scroll_align_1_0,
- scroll_fixture_teardown);
-
- /* Test scrolling in a very large model; also very slow */
- if (g_test_slow ()) {
- g_test_add ("/TreeView/scrolling/large-model/constant-height/middle-no-align",
- ScrollFixture, "50000",
- scroll_fixture_constant_big_setup,
- scroll_no_align,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/large-model/constant-height/end-no-align",
- ScrollFixture, "99999",
- scroll_fixture_constant_big_setup,
- scroll_no_align,
- scroll_fixture_teardown);
-
- g_test_add ("/TreeView/scrolling/large-model/mixed-height/middle-no-align",
- ScrollFixture, "50000",
- scroll_fixture_mixed_big_setup,
- scroll_no_align,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/large-model/mixed-height/end-no-align",
- ScrollFixture, "99999",
- scroll_fixture_mixed_big_setup,
- scroll_no_align,
- scroll_fixture_teardown);
- }
-
- /* Test scrolling to a newly created row */
- g_test_add ("/TreeView/scrolling/new-row/path-0", ScrollFixture,
- GINT_TO_POINTER (0),
- scroll_fixture_constant_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/new-row/path-4", ScrollFixture,
- GINT_TO_POINTER (4),
- scroll_fixture_constant_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- /* We scroll to 8 to test a partial visible row. The 8 is
- * based on my font setting of "Vera Sans 11" and
- * the separators set to 0. (This should be made dynamic; FIXME).
- */
- g_test_add ("/TreeView/scrolling/new-row/path-8", ScrollFixture,
- GINT_TO_POINTER (8),
- scroll_fixture_constant_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/new-row/path-500", ScrollFixture,
- GINT_TO_POINTER (500),
- scroll_fixture_constant_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/new-row/path-999", ScrollFixture,
- GINT_TO_POINTER (999),
- scroll_fixture_constant_setup,
- scroll_new_row,
- scroll_fixture_teardown);
-
- g_test_add ("/TreeView/scrolling/new-row/tree", ScrollFixture,
- NULL,
- scroll_fixture_tree_setup,
- scroll_new_row_tree,
- scroll_fixture_teardown);
-
- /* Test scrolling to a newly created row, in a mixed height model */
- g_test_add ("/TreeView/scrolling/new-row-mixed/path-0", ScrollFixture,
- GINT_TO_POINTER (0),
- scroll_fixture_mixed_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/new-row-mixed/path-3", ScrollFixture,
- GINT_TO_POINTER (3),
- scroll_fixture_mixed_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- /* We scroll to 8 to test a partial visible row. The 8 is
- * based on my font setting of "Vera Sans 11" and
- * the separators set to 0. (This should be made dynamic; FIXME).
- */
- g_test_add ("/TreeView/scrolling/new-row-mixed/path-5", ScrollFixture,
- GINT_TO_POINTER (5),
- scroll_fixture_mixed_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/new-row-mixed/path-500", ScrollFixture,
- GINT_TO_POINTER (500),
- scroll_fixture_mixed_setup,
- scroll_new_row,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/new-row-mixed/path-999", ScrollFixture,
- GINT_TO_POINTER (999),
- scroll_fixture_mixed_setup,
- scroll_new_row,
- scroll_fixture_teardown);
-
- g_test_add ("/TreeView/scrolling/new-row-mixed/tree", ScrollFixture,
- NULL,
- scroll_fixture_mixed_tree_setup,
- scroll_new_row_tree,
- scroll_fixture_teardown);
-
- /* Misc. tests */
- g_test_add ("/TreeView/scrolling/specific/bug-316689",
- ScrollFixture, NULL,
- scroll_fixture_constant_setup, test_bug316689,
- scroll_fixture_teardown);
- g_test_add_func ("/TreeView/scrolling/specific/bug-359231",
- test_bug359231);
- g_test_add ("/TreeView/scrolling/specific/bug-93584",
- ScrollFixture, NULL,
- scroll_fixture_tree_setup, test_bug93584,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/specific/bug-111500",
- ScrollFixture, NULL,
- scroll_fixture_tree_setup, test_bug111500,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/specific/bug-111500-mixed",
- ScrollFixture, NULL,
- scroll_fixture_mixed_tree_setup, test_bug111500_mixed,
- scroll_fixture_teardown);
- g_test_add ("/TreeView/scrolling/specific/bug-163214",
- ScrollFixture, NULL,
- scroll_fixture_constant_setup, test_bug163214,
- scroll_fixture_teardown);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/treeview.c b/gtk/tests/treeview.c
deleted file mode 100644
index 34676a5422..0000000000
--- a/gtk/tests/treeview.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/* Basic GtkTreeView unit tests.
- * Copyright (C) 2009 Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-static void
-test_bug_546005 (void)
-{
- GtkTreeIter iter;
- GtkTreePath *path;
- GtkTreePath *cursor_path;
- GtkListStore *list_store;
- GtkWidget *view;
-
- /* Tests provided by Bjorn Lindqvist, Paul Pogonyshev */
- view = gtk_tree_view_new ();
-
- /* Invalid path on tree view without model */
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path,
- NULL, FALSE);
- gtk_tree_path_free (path);
-
- list_store = gtk_list_store_new (1, G_TYPE_STRING);
- gtk_tree_view_set_model (GTK_TREE_VIEW (view),
- GTK_TREE_MODEL (list_store));
-
- /* Invalid path on tree view with empty model */
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path,
- NULL, FALSE);
- gtk_tree_path_free (path);
-
- /* Valid path */
- gtk_list_store_insert_with_values (list_store, &iter, 0,
- 0, "hi",
- -1);
-
- path = gtk_tree_path_new_from_indices (0, -1);
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path,
- NULL, FALSE);
-
- gtk_tree_view_get_cursor (GTK_TREE_VIEW (view), &cursor_path, NULL);
- //gtk_assert_cmptreepath (cursor_path, ==, path);
-
- gtk_tree_path_free (path);
- gtk_tree_path_free (cursor_path);
-
- /* Invalid path on tree view with model */
- path = gtk_tree_path_new_from_indices (1, -1);
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path,
- NULL, FALSE);
- gtk_tree_path_free (path);
-}
-
-static void
-test_bug_539377 (void)
-{
- GtkWidget *view;
- GtkTreePath *path;
- GtkListStore *list_store;
-
- /* Test provided by Bjorn Lindqvist */
-
- /* Non-realized view, no model */
- view = gtk_tree_view_new ();
- g_assert (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (view), 10, 10, &path,
- NULL, NULL, NULL) == FALSE);
- g_assert (gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (view), 10, 10,
- &path, NULL) == FALSE);
-
- /* Non-realized view, with model */
- list_store = gtk_list_store_new (1, G_TYPE_STRING);
- gtk_tree_view_set_model (GTK_TREE_VIEW (view),
- GTK_TREE_MODEL (list_store));
-
- g_assert (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (view), 10, 10, &path,
- NULL, NULL, NULL) == FALSE);
- g_assert (gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (view), 10, 10,
- &path, NULL) == FALSE);
-}
-
-static void
-test_select_collapsed_row (void)
-{
- GtkTreeIter child, parent;
- GtkTreePath *path;
- GtkTreeStore *tree_store;
- GtkTreeSelection *selection;
- GtkWidget *view;
-
- /* Reported by Michael Natterer */
- tree_store = gtk_tree_store_new (1, G_TYPE_STRING);
- view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (tree_store));
-
- gtk_tree_store_insert_with_values (tree_store, &parent, NULL, 0,
- 0, "Parent",
- -1);
-
- gtk_tree_store_insert_with_values (tree_store, &child, &parent, 0,
- 0, "Child",
- -1);
- gtk_tree_store_insert_with_values (tree_store, &child, &parent, 0,
- 0, "Child",
- -1);
-
-
- /* Try to select a child path. */
- path = gtk_tree_path_new_from_indices (0, 1, -1);
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path, NULL, FALSE);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
-
- /* Check that the parent is not selected. */
- gtk_tree_path_up (path);
- g_return_if_fail (gtk_tree_selection_path_is_selected (selection, path) == FALSE);
-
- /* Nothing should be selected at this point. */
- g_return_if_fail (gtk_tree_selection_count_selected_rows (selection) == 0);
-
- /* Check that selection really still works. */
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path, NULL, FALSE);
- g_return_if_fail (gtk_tree_selection_path_is_selected (selection, path) == TRUE);
- g_return_if_fail (gtk_tree_selection_count_selected_rows (selection) == 1);
-
- /* Expand and select child node now. */
- gtk_tree_path_append_index (path, 1);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
-
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path, NULL, FALSE);
- g_return_if_fail (gtk_tree_selection_path_is_selected (selection, path) == TRUE);
- g_return_if_fail (gtk_tree_selection_count_selected_rows (selection) == 1);
-
- gtk_tree_path_free (path);
-}
-
-static gboolean
-test_row_separator_height_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gboolean ret = FALSE;
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (model, iter);
- if (gtk_tree_path_get_indices (path)[0] == 2)
- ret = TRUE;
- gtk_tree_path_free (path);
-
- return ret;
-}
-
-static void
-test_row_separator_height (void)
-{
- int focus_pad, separator_height, height;
- gboolean wide_separators;
- GtkTreeIter iter;
- GtkTreePath *path;
- GtkListStore *store;
- GtkWidget *window;
- GtkWidget *tree_view;
- GdkRectangle rect, cell_rect;
-
- store = gtk_list_store_new (1, G_TYPE_STRING);
- gtk_list_store_insert_with_values (store, &iter, 0, 0, "Row content", -1);
- gtk_list_store_insert_with_values (store, &iter, 1, 0, "Row content", -1);
- gtk_list_store_insert_with_values (store, &iter, 2, 0, "Row content", -1);
- gtk_list_store_insert_with_values (store, &iter, 3, 0, "Row content", -1);
- gtk_list_store_insert_with_values (store, &iter, 4, 0, "Row content", -1);
-
- window = gtk_offscreen_window_new ();
-
- tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
- gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (tree_view),
- test_row_separator_height_func,
- NULL,
- NULL);
-
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
- 0,
- "Test",
- gtk_cell_renderer_text_new (),
- "text", 0,
- NULL);
-
- gtk_container_add (GTK_CONTAINER (window), tree_view);
- gtk_widget_show_all (window);
-
-
- path = gtk_tree_path_new_from_indices (2, -1);
- gtk_tree_view_get_background_area (GTK_TREE_VIEW (tree_view),
- path, NULL, &rect);
- gtk_tree_view_get_cell_area (GTK_TREE_VIEW (tree_view),
- path, NULL, &cell_rect);
- gtk_tree_path_free (path);
-
- gtk_widget_style_get (tree_view,
- "focus-padding", &focus_pad,
- "wide-separators", &wide_separators,
- "separator-height", &separator_height,
- NULL);
-
- if (wide_separators)
- height = separator_height + 2 * focus_pad;
- else
- height = 2 + 2 * focus_pad;
-
- g_assert_cmpint (rect.height, ==, height);
- g_assert_cmpint (cell_rect.height, ==, height);
-
- gtk_widget_destroy (tree_view);
-}
-
-int
-main (int argc,
- char **argv)
-{
- gtk_test_init (&argc, &argv, NULL);
-
- g_test_add_func ("/TreeView/cursor/bug-546005", test_bug_546005);
- g_test_add_func ("/TreeView/cursor/bug-539377", test_bug_539377);
- g_test_add_func ("/TreeView/cursor/select-collapsed_row",
- test_select_collapsed_row);
- g_test_add_func ("/TreeView/sizing/row-separator-height",
- test_row_separator_height);
-
- return g_test_run ();
-}
diff --git a/gtk/tests/window.c b/gtk/tests/window.c
deleted file mode 100644
index 74fa6eb353..0000000000
--- a/gtk/tests/window.c
+++ /dev/null
@@ -1,361 +0,0 @@
-#include <gtk/gtk.h>
-
-static gboolean interactive = FALSE;
-
-static gboolean
-stop_main (gpointer data)
-{
- gtk_main_quit ();
-
- return G_SOURCE_REMOVE;
-}
-
-static gboolean
-on_draw (GtkWidget *widget, cairo_t *cr)
-{
- gint i, j;
-
- for (i = 0; 20 * i < gtk_widget_get_allocated_width (widget); i++)
- {
- for (j = 0; 20 * j < gtk_widget_get_allocated_height (widget); j++)
- {
- if ((i + j) % 2 == 1)
- cairo_set_source_rgb (cr, 1., 1., 1.);
- else
- cairo_set_source_rgb (cr, 0., 0., 0.);
-
- cairo_rectangle (cr, 20. * i, 20. *j, 20., 20.);
- cairo_fill (cr);
- }
- }
-
- return FALSE;
-}
-
-static gboolean
-on_keypress (GtkWidget *widget)
-{
- gtk_main_quit ();
-
- return TRUE;
-}
-
-static void
-test_default_size (void)
-{
- GtkWidget *window;
- GtkWidget *box;
- gint w, h;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_signal_connect (window, "draw", G_CALLBACK (on_draw), NULL);
- if (interactive)
- g_signal_connect (window, "key-press-event", G_CALLBACK (on_keypress), NULL);
-
- box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_container_add (GTK_CONTAINER (window), box);
-
- /* check that default size is unset initially */
- gtk_window_get_default_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, -1);
- g_assert_cmpint (h, ==, -1);
-
- /* check that setting default size before realize works */
- gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
-
- gtk_window_get_default_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 300);
- g_assert_cmpint (h, ==, 300);
-
- /* check that the window size is also reported accordingly */
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 300);
- g_assert_cmpint (h, ==, 300);
-
- gtk_widget_show_all (window);
-
- if (!interactive)
- g_timeout_add (200, stop_main, NULL);
- gtk_main ();
-
- /* check that the window and its content actually gets the right size */
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 300);
- g_assert_cmpint (h, ==, 300);
-
- g_assert_cmpint (gtk_widget_get_allocated_width (window), ==, 300);
- g_assert_cmpint (gtk_widget_get_allocated_height (window), ==, 300);
-
- g_assert_cmpint (gtk_widget_get_allocated_width (box), ==, 300);
- g_assert_cmpint (gtk_widget_get_allocated_height (box), ==, 300);
-
- /* check that setting default size after the fact does not change
- * window size
- */
- gtk_window_set_default_size (GTK_WINDOW (window), 100, 600);
- gtk_window_get_default_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 100);
- g_assert_cmpint (h, ==, 600);
-
- if (!interactive)
- g_timeout_add (200, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 300);
- g_assert_cmpint (h, ==, 300);
-
- /* check that even hide/show does not pull in the new default */
- gtk_widget_hide (window);
- gtk_widget_show (window);
-
- if (!interactive)
- g_timeout_add (200, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 300);
- g_assert_cmpint (h, ==, 300);
-
- gtk_widget_destroy (window);
-}
-
-static void
-test_resize (void)
-{
- GtkWidget *window;
- GtkWidget *box;
- gint w, h;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_signal_connect (window, "draw", G_CALLBACK (on_draw), NULL);
- if (interactive)
- g_signal_connect (window, "key-press-event", G_CALLBACK (on_keypress), NULL);
-
- box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_container_add (GTK_CONTAINER (window), box);
-
- /* test that resize before show overrides default size */
- gtk_window_set_default_size (GTK_WINDOW (window), 500, 500);
-
- gtk_window_resize (GTK_WINDOW (window), 1, 1);
-
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 1);
- g_assert_cmpint (h, ==, 1);
-
- gtk_window_resize (GTK_WINDOW (window), 400, 200);
-
- gtk_widget_show_all (window);
-
- if (!interactive)
- g_timeout_add (200, stop_main, NULL);
- gtk_main ();
-
- /* test that resize before show works */
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 400);
- g_assert_cmpint (h, ==, 200);
-
- /* test that resize after show works, both
- * for making things bigger and for making things
- * smaller
- */
- gtk_window_resize (GTK_WINDOW (window), 200, 400);
-
- if (!interactive)
- g_timeout_add (200, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (w, ==, 200);
- g_assert_cmpint (h, ==, 400);
-
- gtk_widget_destroy (window);
-}
-
-static void
-test_resize_popup (void)
-{
- GtkWidget *window;
- gint x, y, w, h;
-
- /* testcase for the dnd window */
- window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_window_set_screen (GTK_WINDOW (window), gdk_screen_get_default ());
- gtk_window_resize (GTK_WINDOW (window), 1, 1);
- gtk_window_move (GTK_WINDOW (window), -99, -99);
-
- gtk_window_get_position (GTK_WINDOW (window), &x, &y);
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (x, ==, -99);
- g_assert_cmpint (y, ==, -99);
- g_assert_cmpint (w, ==, 1);
- g_assert_cmpint (h, ==, 1);
-
- gtk_widget_show (window);
-
- g_timeout_add (200, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_position (GTK_WINDOW (window), &x, &y);
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- g_assert_cmpint (x, ==, -99);
- g_assert_cmpint (y, ==, -99);
- g_assert_cmpint (w, ==, 1);
- g_assert_cmpint (h, ==, 1);
-
- gtk_widget_destroy (window);
-}
-
-static void
-test_show_hide (void)
-{
- GtkWidget *window;
- gint w, h, w1, h1;
-
- g_test_bug ("696882");
-
- /* test that hide/show does not affect the size */
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- gtk_widget_show (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
-
- gtk_widget_hide (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w1, &h1);
- g_assert_cmpint (w, ==, w1);
- g_assert_cmpint (h, ==, h1);
-
- gtk_widget_show (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w1, &h1);
- g_assert_cmpint (w, ==, w1);
- g_assert_cmpint (h, ==, h1);
-
- gtk_widget_destroy (window);
-}
-
-static void
-test_show_hide2 (void)
-{
- GtkWidget *window;
- gint x, y, w, h, w1, h1;
-
- g_test_bug ("696882");
-
- /* test that hide/show does not affect the size,
- * even when get_position/move is called
- */
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- gtk_widget_show (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_position (GTK_WINDOW (window), &x, &y);
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- gtk_widget_hide (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w1, &h1);
- g_assert_cmpint (w, ==, w1);
- g_assert_cmpint (h, ==, h1);
-
- gtk_window_move (GTK_WINDOW (window), x, y);
- gtk_widget_show (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w1, &h1);
- g_assert_cmpint (w, ==, w1);
- g_assert_cmpint (h, ==, h1);
-
- gtk_widget_destroy (window);
-}
-
-static void
-test_show_hide3 (void)
-{
- GtkWidget *window;
- gint x, y, w, h, w1, h1;
-
- g_test_bug ("696882");
-
- /* test that hide/show does not affect the size,
- * even when get_position/move is called and
- * a default size is set
- */
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
-
- gtk_widget_show (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_position (GTK_WINDOW (window), &x, &y);
- gtk_window_get_size (GTK_WINDOW (window), &w, &h);
- gtk_widget_hide (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w1, &h1);
- g_assert_cmpint (w, ==, w1);
- g_assert_cmpint (h, ==, h1);
-
- gtk_window_move (GTK_WINDOW (window), x, y);
- gtk_widget_show (window);
-
- g_timeout_add (100, stop_main, NULL);
- gtk_main ();
-
- gtk_window_get_size (GTK_WINDOW (window), &w1, &h1);
- g_assert_cmpint (w, ==, w1);
- g_assert_cmpint (h, ==, h1);
-
- gtk_widget_destroy (window);
-}
-
-int
-main (int argc, char *argv[])
-{
- gint i;
-
- gtk_test_init (&argc, &argv);
- g_test_bug_base ("http://bugzilla.gnome.org/");
-
- for (i = 0; i < argc; i++)
- {
- if (g_strcmp0 (argv[i], "--interactive") == 0)
- interactive = TRUE;
- }
-
- g_test_add_func ("/window/default-size", test_default_size);
- g_test_add_func ("/window/resize", test_resize);
- g_test_add_func ("/window/resize-popup", test_resize_popup);
- g_test_add_func ("/window/show-hide", test_show_hide);
- g_test_add_func ("/window/show-hide2", test_show_hide2);
- g_test_add_func ("/window/show-hide3", test_show_hide3);
-
- return g_test_run ();
-}