[gtk+] Add a scrolling test case involving creating new rows in tree stores



commit 7b4f09a589de2abae42fab87805e468e467b8c50
Author: Kristian Rietveld <kris gtk org>
Date:   Sun Aug 23 21:44:58 2009 +0200

    Add a scrolling test case involving creating new rows in tree stores
    
    Based on a bug report from Miroslav Rajcic, details are in the tree view
    scrolling suite source code.

 gtk/tests/treeview-scrolling.c |   86 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 0 deletions(-)
---
diff --git a/gtk/tests/treeview-scrolling.c b/gtk/tests/treeview-scrolling.c
index e69c4c1..81dfd8d 100644
--- a/gtk/tests/treeview-scrolling.c
+++ b/gtk/tests/treeview-scrolling.c
@@ -38,6 +38,8 @@
  *   - 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.
  */
 
 
@@ -176,6 +178,34 @@ scroll_fixture_single_setup (ScrollFixture *fixture,
 	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_teardown (ScrollFixture *fixture,
 			 gconstpointer  test_data)
@@ -753,6 +783,56 @@ scroll_new_row (ScrollFixture *fixture,
 	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_tree_view_get_vadjustment (GTK_TREE_VIEW (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);
+
+		while (gtk_events_pending ())
+			gtk_main_iteration ();
+
+		/* Test position, the scroll bar must be at the end */
+		g_assert (vadjustment->value == vadjustment->upper - vadjustment->page_size);
+	}
+}
+
 /* Test for GNOME bugzilla bug 359231; tests "recovery when removing a bunch of
  * rows at the bottom.
  */
@@ -1091,6 +1171,12 @@ main (int argc, char **argv)
 		    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);
+
 	/* Misc. tests */
 	g_test_add ("/TreeView/scrolling/specific/bug-316689",
 			ScrollFixture, NULL,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]