forked from AuroraMiddleware/gtk
Add two more unit tests for bug 659022
Both pointing out problems in gtk_tree_model_filter_row_deleted().
This commit is contained in:
parent
f646ed6f76
commit
e8323e2abc
@ -6661,6 +6661,107 @@ specific_bug_659022_row_changed_emission (void)
|
||||
g_object_unref (model);
|
||||
}
|
||||
|
||||
static void
|
||||
specific_bug_659022_row_deleted_node_invisible (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));
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/* main */
|
||||
|
||||
void
|
||||
@ -7016,4 +7117,8 @@ register_filter_model_tests (void)
|
||||
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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user