1 /* Extensive GtkTreeModelFilter tests.
2 * Copyright (C) 2009 Kristian Rietveld <kris@gtk.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
27 #define LEVEL_LENGTH 5
30 create_tree_store_set_values (GtkTreeStore *store,
36 path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), iter);
37 gtk_tree_store_set (store, iter,
38 0, gtk_tree_path_to_string (path),
41 gtk_tree_path_free (path);
45 create_tree_store_recurse (int depth,
52 for (i = 0; i < LEVEL_LENGTH; i++)
56 gtk_tree_store_insert (store, &iter, parent, i);
57 create_tree_store_set_values (store, &iter, visible);
60 create_tree_store_recurse (depth - 1, store, &iter, visible);
65 create_tree_store (int depth,
70 store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
72 create_tree_store_recurse (depth, store, NULL, visible);
87 GtkTreeModelFilter *filter;
91 filter_test_setup_generic (FilterTest *fixture,
92 gconstpointer test_data,
97 const GtkTreePath *vroot = test_data;
100 fixture->store = create_tree_store (depth, !empty);
102 /* Please forgive me for casting const away. */
103 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (fixture->store),
104 (GtkTreePath *)vroot);
105 fixture->filter = GTK_TREE_MODEL_FILTER (filter);
108 gtk_tree_model_filter_set_visible_column (fixture->filter, 1);
110 /* We need a tree view that's listening to get ref counting from that
113 fixture->tree_view = gtk_tree_view_new_with_model (filter);
117 filter_test_setup (FilterTest *fixture,
118 gconstpointer test_data)
120 filter_test_setup_generic (fixture, test_data, 3, FALSE, FALSE);
124 filter_test_setup_empty (FilterTest *fixture,
125 gconstpointer test_data)
127 filter_test_setup_generic (fixture, test_data, 3, TRUE, FALSE);
131 filter_test_setup_unfiltered (FilterTest *fixture,
132 gconstpointer test_data)
134 filter_test_setup_generic (fixture, test_data, 3, FALSE, TRUE);
138 filter_test_setup_empty_unfiltered (FilterTest *fixture,
139 gconstpointer test_data)
141 filter_test_setup_generic (fixture, test_data, 3, TRUE, TRUE);
145 filter_test_enable_filter (FilterTest *fixture)
147 gtk_tree_model_filter_set_visible_column (fixture->filter, 1);
148 gtk_tree_model_filter_refilter (fixture->filter);
152 filter_test_teardown (FilterTest *fixture,
153 gconstpointer test_data)
155 g_object_unref (fixture->filter);
156 g_object_unref (fixture->store);
160 * Model structure validation
164 check_filter_model_recurse (FilterTest *fixture,
165 GtkTreePath *store_parent_path,
166 GtkTreePath *filter_parent_path)
169 GtkTreeIter store_iter;
170 GtkTreeIter filter_iter;
171 gboolean store_has_next, filter_has_next;
173 gtk_tree_path_down (store_parent_path);
174 gtk_tree_path_down (filter_parent_path);
176 store_has_next = gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store),
177 &store_iter, store_parent_path);
178 filter_has_next = gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->filter),
179 &filter_iter, filter_parent_path);
181 for (i = 0; i < LEVEL_LENGTH; i++)
185 g_return_if_fail (store_has_next == TRUE);
187 gtk_tree_model_get (GTK_TREE_MODEL (fixture->store),
195 gchar *filter_str, *store_str;
197 g_return_if_fail (filter_has_next == TRUE);
200 tmp = gtk_tree_model_get_path (GTK_TREE_MODEL (fixture->filter),
202 g_return_if_fail (gtk_tree_path_compare (tmp, filter_parent_path) == 0);
204 /* Verify model content */
205 gtk_tree_model_get (GTK_TREE_MODEL (fixture->store),
209 gtk_tree_model_get (GTK_TREE_MODEL (fixture->filter),
214 g_return_if_fail (g_strcmp0 (store_str, filter_str) == 0);
219 if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (fixture->filter),
222 g_return_if_fail (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (fixture->store), &store_iter));
224 check_filter_model_recurse (fixture,
225 gtk_tree_path_copy (store_parent_path),
229 gtk_tree_path_next (filter_parent_path);
230 filter_has_next = gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->filter), &filter_iter);
233 gtk_tree_path_next (store_parent_path);
234 store_has_next = gtk_tree_model_iter_next (GTK_TREE_MODEL (fixture->store), &store_iter);
237 /* Both models should have no more content! */
238 g_return_if_fail (store_has_next == FALSE);
239 g_return_if_fail (filter_has_next == FALSE);
241 gtk_tree_path_free (store_parent_path);
242 gtk_tree_path_free (filter_parent_path);
246 check_filter_model (FilterTest *fixture)
250 path = gtk_tree_path_new ();
252 check_filter_model_recurse (fixture, path, gtk_tree_path_copy (path));
256 check_filter_model_with_root (FilterTest *fixture,
259 check_filter_model_recurse (fixture,
260 gtk_tree_path_copy (path),
261 gtk_tree_path_new ());
267 check_level_length (GtkTreeModelFilter *filter,
273 int l = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (filter), NULL);
274 g_return_if_fail (l == length);
281 gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (filter),
283 l = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (filter), &iter);
284 g_return_if_fail (l == length);
289 set_path_visibility (FilterTest *fixture,
293 GtkTreeIter store_iter;
295 gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
297 gtk_tree_store_set (fixture->store, &store_iter,
303 insert_path_with_visibility (FilterTest *fixture,
304 const gchar *path_string,
309 GtkTreeIter parent, iter;
311 path = gtk_tree_path_new_from_string (path_string);
312 position = gtk_tree_path_get_indices (path)[gtk_tree_path_get_depth (path)];
313 gtk_tree_path_up (path);
315 if (gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &parent, path))
317 gtk_tree_store_insert (fixture->store, &iter, &parent, position);
318 create_tree_store_set_values (fixture->store, &iter, visible);
320 gtk_tree_path_free (path);
328 verify_test_suite (FilterTest *fixture,
329 gconstpointer user_data)
331 check_filter_model (fixture);
335 verify_test_suite_vroot (FilterTest *fixture,
336 gconstpointer user_data)
338 check_filter_model_with_root (fixture, (GtkTreePath *)user_data);
343 filled_hide_root_level (FilterTest *fixture,
344 gconstpointer user_data)
346 set_path_visibility (fixture, "2", FALSE);
347 check_filter_model (fixture);
348 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
350 set_path_visibility (fixture, "0", FALSE);
351 check_filter_model (fixture);
352 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
354 set_path_visibility (fixture, "4", FALSE);
355 check_filter_model (fixture);
356 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 3);
360 set_path_visibility (fixture, "1", FALSE);
361 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
363 set_path_visibility (fixture, "3", FALSE);
364 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 5);
366 check_filter_model (fixture);
369 set_path_visibility (fixture, "1", TRUE);
370 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
372 set_path_visibility (fixture, "3", TRUE);
373 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 3);
375 check_filter_model (fixture);
379 filled_hide_child_levels (FilterTest *fixture,
380 gconstpointer user_data)
382 set_path_visibility (fixture, "0:2", FALSE);
383 check_filter_model (fixture);
384 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
385 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
387 set_path_visibility (fixture, "0:4", FALSE);
388 check_filter_model (fixture);
389 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
390 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
392 set_path_visibility (fixture, "0:4:3", FALSE);
393 check_filter_model (fixture);
394 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
395 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
397 set_path_visibility (fixture, "0:4:0", FALSE);
398 set_path_visibility (fixture, "0:4:1", FALSE);
399 set_path_visibility (fixture, "0:4:2", FALSE);
400 set_path_visibility (fixture, "0:4:4", FALSE);
401 check_filter_model (fixture);
402 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
403 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
405 set_path_visibility (fixture, "0:4", TRUE);
406 /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
407 check_filter_model (fixture);
408 check_level_length (fixture->filter, "0:3", 0);
410 set_path_visibility (fixture, "0:2", TRUE);
411 check_filter_model (fixture);
412 check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
413 check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
414 check_level_length (fixture->filter, "0:4", 0);
416 set_path_visibility (fixture, "0:4:2", TRUE);
417 set_path_visibility (fixture, "0:4:4", TRUE);
418 check_level_length (fixture->filter, "0:4", 2);
423 filled_vroot_hide_root_level (FilterTest *fixture,
424 gconstpointer user_data)
426 GtkTreePath *path = (GtkTreePath *)user_data;
428 /* These changes do not affect the filter's root level */
429 set_path_visibility (fixture, "0", FALSE);
430 check_filter_model_with_root (fixture, path);
431 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
432 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
434 set_path_visibility (fixture, "4", FALSE);
435 check_filter_model_with_root (fixture, path);
436 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
437 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
439 /* Even though we set the virtual root parent node to FALSE,
440 * the virtual root contents remain.
442 set_path_visibility (fixture, "2", FALSE);
443 check_filter_model_with_root (fixture, path);
444 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
445 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
448 set_path_visibility (fixture, "1", FALSE);
449 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
450 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
452 set_path_visibility (fixture, "3", FALSE);
453 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
454 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
456 check_filter_model_with_root (fixture, path);
459 set_path_visibility (fixture, "2", TRUE);
460 check_filter_model_with_root (fixture, path);
461 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
462 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
464 set_path_visibility (fixture, "1", TRUE);
465 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
466 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
468 set_path_visibility (fixture, "3", TRUE);
469 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
470 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
472 check_filter_model_with_root (fixture, path);
474 /* Now test changes in the virtual root level */
475 set_path_visibility (fixture, "2:2", FALSE);
476 check_filter_model_with_root (fixture, path);
477 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
479 set_path_visibility (fixture, "2:4", FALSE);
480 check_filter_model_with_root (fixture, path);
481 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
483 set_path_visibility (fixture, "1:4", FALSE);
484 check_filter_model_with_root (fixture, path);
485 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
487 set_path_visibility (fixture, "2:4", TRUE);
488 check_filter_model_with_root (fixture, path);
489 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
491 set_path_visibility (fixture, "2", FALSE);
492 check_filter_model_with_root (fixture, path);
493 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
495 set_path_visibility (fixture, "2:0", FALSE);
496 set_path_visibility (fixture, "2:1", FALSE);
497 set_path_visibility (fixture, "2:2", FALSE);
498 set_path_visibility (fixture, "2:3", FALSE);
499 set_path_visibility (fixture, "2:4", FALSE);
500 check_filter_model_with_root (fixture, path);
501 check_level_length (fixture->filter, NULL, 0);
503 set_path_visibility (fixture, "2", TRUE);
504 check_filter_model_with_root (fixture, path);
505 check_level_length (fixture->filter, NULL, 0);
507 set_path_visibility (fixture, "1:4", FALSE);
508 check_filter_model_with_root (fixture, path);
509 check_level_length (fixture->filter, NULL, 0);
511 set_path_visibility (fixture, "2:4", TRUE);
512 check_filter_model_with_root (fixture, path);
513 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
515 set_path_visibility (fixture, "2:4", FALSE);
516 check_filter_model_with_root (fixture, path);
517 check_level_length (fixture->filter, NULL, 0);
519 set_path_visibility (fixture, "2", FALSE);
520 check_filter_model_with_root (fixture, path);
521 check_level_length (fixture->filter, NULL, 0);
523 set_path_visibility (fixture, "2:0", TRUE);
524 set_path_visibility (fixture, "2:1", TRUE);
525 set_path_visibility (fixture, "2:2", TRUE);
526 check_filter_model_with_root (fixture, path);
527 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
529 set_path_visibility (fixture, "2", TRUE);
530 check_filter_model_with_root (fixture, path);
531 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
535 filled_vroot_hide_child_levels (FilterTest *fixture,
536 gconstpointer user_data)
538 GtkTreePath *path = (GtkTreePath *)user_data;
540 set_path_visibility (fixture, "2:0:2", FALSE);
541 check_filter_model_with_root (fixture, path);
542 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
543 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
545 set_path_visibility (fixture, "2:0:4", FALSE);
546 check_filter_model_with_root (fixture, path);
547 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
548 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
550 set_path_visibility (fixture, "2:0:4:3", FALSE);
551 check_filter_model_with_root (fixture, path);
552 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
553 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
555 set_path_visibility (fixture, "2:0:4:0", FALSE);
556 set_path_visibility (fixture, "2:0:4:1", FALSE);
557 set_path_visibility (fixture, "2:0:4:2", FALSE);
558 set_path_visibility (fixture, "2:0:4:4", FALSE);
559 check_filter_model_with_root (fixture, path);
560 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
561 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
563 set_path_visibility (fixture, "2:0:4", TRUE);
564 /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
565 check_filter_model_with_root (fixture, path);
566 check_level_length (fixture->filter, "0:3", 0);
568 set_path_visibility (fixture, "2:0:2", TRUE);
569 check_filter_model_with_root (fixture, path);
570 check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
571 check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
572 check_level_length (fixture->filter, "0:4", 0);
574 set_path_visibility (fixture, "2:0:4:2", TRUE);
575 set_path_visibility (fixture, "2:0:4:4", TRUE);
576 check_level_length (fixture->filter, "0:4", 2);
581 empty_show_nodes (FilterTest *fixture,
582 gconstpointer user_data)
584 check_filter_model (fixture);
585 check_level_length (fixture->filter, NULL, 0);
587 set_path_visibility (fixture, "3", TRUE);
588 check_filter_model (fixture);
589 check_level_length (fixture->filter, NULL, 1);
590 check_level_length (fixture->filter, "0", 0);
592 set_path_visibility (fixture, "3:2:2", TRUE);
593 check_filter_model (fixture);
594 check_level_length (fixture->filter, NULL, 1);
595 check_level_length (fixture->filter, "0", 0);
597 set_path_visibility (fixture, "3:2", TRUE);
598 check_filter_model (fixture);
599 check_level_length (fixture->filter, NULL, 1);
600 check_level_length (fixture->filter, "0", 1);
601 check_level_length (fixture->filter, "0:0", 1);
602 check_level_length (fixture->filter, "0:0:0", 0);
604 set_path_visibility (fixture, "3", FALSE);
605 check_filter_model (fixture);
606 check_level_length (fixture->filter, NULL, 0);
608 set_path_visibility (fixture, "3:2:1", TRUE);
609 set_path_visibility (fixture, "3", TRUE);
610 check_filter_model (fixture);
611 check_level_length (fixture->filter, NULL, 1);
612 check_level_length (fixture->filter, "0", 1);
613 check_level_length (fixture->filter, "0:0", 2);
614 check_level_length (fixture->filter, "0:0:0", 0);
618 empty_vroot_show_nodes (FilterTest *fixture,
619 gconstpointer user_data)
621 GtkTreePath *path = (GtkTreePath *)user_data;
623 check_filter_model_with_root (fixture, path);
624 check_level_length (fixture->filter, NULL, 0);
626 set_path_visibility (fixture, "2", TRUE);
627 check_filter_model_with_root (fixture, path);
628 check_level_length (fixture->filter, NULL, 0);
630 set_path_visibility (fixture, "2:2:2", TRUE);
631 check_filter_model_with_root (fixture, path);
632 check_level_length (fixture->filter, NULL, 0);
634 set_path_visibility (fixture, "2:2", TRUE);
635 check_filter_model_with_root (fixture, path);
636 check_level_length (fixture->filter, NULL, 1);
637 check_level_length (fixture->filter, "0", 1);
638 check_level_length (fixture->filter, "0:0", 0);
640 set_path_visibility (fixture, "3", TRUE);
641 check_filter_model_with_root (fixture, path);
642 check_level_length (fixture->filter, NULL, 1);
644 set_path_visibility (fixture, "2:2", FALSE);
645 check_filter_model_with_root (fixture, path);
646 check_level_length (fixture->filter, NULL, 0);
648 set_path_visibility (fixture, "2:2:1", TRUE);
649 set_path_visibility (fixture, "2:2", TRUE);
650 check_filter_model_with_root (fixture, path);
651 check_level_length (fixture->filter, NULL, 1);
652 check_level_length (fixture->filter, "0", 2);
653 check_level_length (fixture->filter, "0:1", 0);
658 unfiltered_hide_single (FilterTest *fixture,
659 gconstpointer user_data)
662 set_path_visibility (fixture, "2", FALSE);
664 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
666 filter_test_enable_filter (fixture);
668 check_filter_model (fixture);
669 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
673 unfiltered_hide_single_child (FilterTest *fixture,
674 gconstpointer user_data)
677 set_path_visibility (fixture, "2:2", FALSE);
679 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
680 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
682 filter_test_enable_filter (fixture);
684 check_filter_model (fixture);
685 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
686 check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
690 unfiltered_hide_single_multi_level (FilterTest *fixture,
691 gconstpointer user_data)
694 set_path_visibility (fixture, "2:2:2", FALSE);
695 set_path_visibility (fixture, "2:2", FALSE);
697 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
698 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
699 check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
701 filter_test_enable_filter (fixture);
703 check_filter_model (fixture);
704 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
705 check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
707 set_path_visibility (fixture, "2:2", TRUE);
709 check_filter_model (fixture);
710 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
711 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
712 check_level_length (fixture->filter, "2:2", LEVEL_LENGTH - 1);
717 unfiltered_show_single (FilterTest *fixture,
718 gconstpointer user_data)
721 set_path_visibility (fixture, "2", TRUE);
723 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
725 filter_test_enable_filter (fixture);
727 check_filter_model (fixture);
728 check_level_length (fixture->filter, NULL, 1);
732 unfiltered_show_single_child (FilterTest *fixture,
733 gconstpointer user_data)
736 set_path_visibility (fixture, "2:2", TRUE);
738 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
739 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
741 filter_test_enable_filter (fixture);
743 check_filter_model (fixture);
744 check_level_length (fixture->filter, NULL, 0);
746 set_path_visibility (fixture, "2", TRUE);
747 check_level_length (fixture->filter, NULL, 1);
748 check_level_length (fixture->filter, "2", 1);
752 unfiltered_show_single_multi_level (FilterTest *fixture,
753 gconstpointer user_data)
756 set_path_visibility (fixture, "2:2:2", TRUE);
757 set_path_visibility (fixture, "2:2", TRUE);
759 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
760 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
761 check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
763 filter_test_enable_filter (fixture);
765 check_filter_model (fixture);
766 check_level_length (fixture->filter, NULL, 0);
768 set_path_visibility (fixture, "2", TRUE);
769 check_filter_model (fixture);
770 check_level_length (fixture->filter, NULL, 1);
771 check_level_length (fixture->filter, "2", 1);
772 check_level_length (fixture->filter, "2:2", 1);
777 specific_path_dependent_filter_func (GtkTreeModel *model,
783 path = gtk_tree_model_get_path (model, iter);
784 if (gtk_tree_path_get_indices (path)[0] < 4)
791 specific_path_dependent_filter (void)
797 GtkTreeModel *filter;
799 list = gtk_list_store_new (1, G_TYPE_INT);
800 gtk_list_store_insert_with_values (list, &iter, 0, 0, 1, -1);
801 gtk_list_store_insert_with_values (list, &iter, 1, 0, 2, -1);
802 gtk_list_store_insert_with_values (list, &iter, 2, 0, 3, -1);
803 gtk_list_store_insert_with_values (list, &iter, 3, 0, 4, -1);
804 gtk_list_store_insert_with_values (list, &iter, 4, 0, 5, -1);
805 gtk_list_store_insert_with_values (list, &iter, 5, 0, 6, -1);
806 gtk_list_store_insert_with_values (list, &iter, 6, 0, 7, -1);
807 gtk_list_store_insert_with_values (list, &iter, 7, 0, 8, -1);
809 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (list));
810 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (sort), NULL);
811 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
812 specific_path_dependent_filter_func,
815 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort), 0,
816 GTK_SORT_DESCENDING);
818 for (i = 0; i < 4; i++)
820 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
822 gtk_list_store_remove (list, &iter);
824 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
826 gtk_list_store_remove (list, &iter);
832 specific_append_after_collapse_visible_func (GtkTreeModel *model,
837 gboolean hide_negative_numbers;
839 gtk_tree_model_get (model, iter, 1, &number, -1);
840 hide_negative_numbers = GPOINTER_TO_INT (g_object_get_data (data, "private-hide-negative-numbers"));
842 return (number >= 0 || !hide_negative_numbers);
846 specific_append_after_collapse (void)
848 /* This test is based on one of the test cases I found in my
849 * old test cases directory. I unfortunately do not have a record
850 * from who this test case originated. -Kris.
854 * - Show tree, expand, collapse.
859 GtkTreeIter child_iter;
860 GtkTreeIter child_iter2;
861 GtkTreePath *append_path;
863 GtkTreeModel *filter;
867 GtkWidget *tree_view;
869 store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_INT);
871 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
872 g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
873 GINT_TO_POINTER (FALSE));
874 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
875 specific_append_after_collapse_visible_func,
878 sort = gtk_tree_model_sort_new_with_model (filter);
880 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
881 tree_view = gtk_tree_view_new_with_model (sort);
882 gtk_container_add (GTK_CONTAINER (window), tree_view);
883 gtk_widget_realize (tree_view);
885 while (gtk_events_pending ())
886 gtk_main_iteration ();
888 gtk_tree_store_prepend (store, &iter, NULL);
889 gtk_tree_store_set (store, &iter,
890 0, "hallo", 1, 1, -1);
892 gtk_tree_store_append (store, &child_iter, &iter);
893 gtk_tree_store_set (store, &child_iter,
894 0, "toemaar", 1, 1, -1);
896 gtk_tree_store_append (store, &child_iter2, &child_iter);
897 gtk_tree_store_set (store, &child_iter2,
898 0, "very deep", 1, 1, -1);
900 append_path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &child_iter2);
902 gtk_tree_store_append (store, &child_iter, &iter);
903 gtk_tree_store_set (store, &child_iter,
906 gtk_tree_store_append (store, &child_iter, &iter);
907 gtk_tree_store_set (store, &child_iter,
908 0, "some word", 1, -1, -1);
910 /* Expand and collapse the tree */
911 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
912 while (gtk_events_pending ())
913 gtk_main_iteration ();
915 gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
916 while (gtk_events_pending ())
917 gtk_main_iteration ();
920 g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
921 GINT_TO_POINTER (TRUE));
923 if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, append_path))
925 gtk_tree_store_append (store, &child_iter, &iter);
926 gtk_tree_store_set (store, &child_iter,
927 0, "new new new !!", 1, 1, -1);
929 gtk_tree_path_free (append_path);
932 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
933 while (gtk_events_pending ())
934 gtk_main_iteration ();
939 specific_sort_filter_remove_node_compare_func (GtkTreeModel *model,
948 specific_sort_filter_remove_node_visible_func (GtkTreeModel *model,
954 /* Do reference the model */
955 gtk_tree_model_get (model, iter, 0, &item, -1);
962 specific_sort_filter_remove_node (void)
964 /* This test is based on one of the test cases I found in my
965 * old test cases directory. I unfortunately do not have a record
966 * from who this test case originated. -Kris.
969 * - Create tree store, sort, filter models. The sort model has
970 * a default sort func that is enabled, filter model a visible func
971 * that defaults to returning FALSE.
972 * - Remove a node from the tree store.
977 GtkTreeModel *filter;
981 GtkWidget *tree_view;
983 store = gtk_tree_store_new (1, G_TYPE_STRING);
984 gtk_tree_store_append (store, &iter, NULL);
985 gtk_tree_store_set (store, &iter, 0, "Hello1", -1);
987 gtk_tree_store_append (store, &iter, NULL);
988 gtk_tree_store_set (store, &iter, 0, "Hello2", -1);
990 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
991 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
992 specific_sort_filter_remove_node_compare_func, NULL, NULL);
994 filter = gtk_tree_model_filter_new (sort, NULL);
995 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
996 specific_sort_filter_remove_node_visible_func,
1000 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1001 tree_view = gtk_tree_view_new_with_model (filter);
1002 gtk_container_add (GTK_CONTAINER (window), tree_view);
1003 gtk_widget_realize (tree_view);
1005 while (gtk_events_pending ())
1006 gtk_main_iteration ();
1009 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
1010 gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
1011 gtk_tree_store_remove (store, &iter);
1013 while (gtk_events_pending ())
1014 gtk_main_iteration ();
1019 specific_sort_filter_remove_root (void)
1021 /* This test is based on one of the test cases I found in my
1022 * old test cases directory. I unfortunately do not have a record
1023 * from who this test case originated. -Kris.
1026 GtkTreeModel *model, *sort, *filter;
1027 GtkTreeIter root, mid, leaf;
1030 model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_INT));
1031 gtk_tree_store_append (GTK_TREE_STORE (model), &root, NULL);
1032 gtk_tree_store_append (GTK_TREE_STORE (model), &mid, &root);
1033 gtk_tree_store_append (GTK_TREE_STORE (model), &leaf, &mid);
1035 path = gtk_tree_model_get_path (model, &mid);
1037 sort = gtk_tree_model_sort_new_with_model (model);
1038 filter = gtk_tree_model_filter_new (sort, path);
1040 gtk_tree_store_remove (GTK_TREE_STORE (model), &root);
1042 g_object_unref (filter);
1043 g_object_unref (sort);
1044 g_object_unref (model);
1049 specific_filter_add_child (void)
1051 /* This test is based on one of the test cases I found in my
1052 * old test cases directory. I unfortunately do not have a record
1053 * from who this test case originated. -Kris.
1057 GtkTreeIter iter_first;
1059 GtkTreeStore *store;
1060 GtkTreeModel *filter;
1062 store = gtk_tree_store_new (1, G_TYPE_STRING);
1064 gtk_tree_store_append (store, &iter_first, NULL);
1065 gtk_tree_store_set (store, &iter_first, 0, "Hello", -1);
1067 gtk_tree_store_append (store, &iter, NULL);
1068 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1070 gtk_tree_store_append (store, &iter, NULL);
1071 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1073 gtk_tree_store_append (store, &iter, NULL);
1074 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1076 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1078 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1079 gtk_tree_store_append (store, &child, &iter_first);
1080 gtk_tree_store_set (store, &child, 0, "Hello", -1);
1085 specific_bug_300089 (void)
1087 /* Test case for GNOME Bugzilla bug 300089. Written by
1090 GtkTreeModel *sort_model, *child_model;
1092 GtkTreeIter iter, iter2, sort_iter;
1094 child_model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_STRING));
1096 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1097 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1098 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1099 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "B", -1);
1101 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1102 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "D", -1);
1103 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1104 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "E", -1);
1106 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1107 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "C", -1);
1110 sort_model = GTK_TREE_MODEL (gtk_tree_model_sort_new_with_model (child_model));
1111 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
1112 0, GTK_SORT_ASCENDING);
1114 path = gtk_tree_path_new_from_indices (1, 1, -1);
1116 /* make sure a level is constructed */
1117 gtk_tree_model_get_iter (sort_model, &sort_iter, path);
1119 /* change the "E" row in a way that causes it to change position */
1120 gtk_tree_model_get_iter (child_model, &iter, path);
1121 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1126 specific_bug_301558_sort_func (GtkTreeModel *model,
1133 gtk_tree_model_get (model, a, 0, &i, -1);
1134 gtk_tree_model_get (model, b, 0, &j, -1);
1140 specific_bug_301558 (void)
1142 /* Test case for GNOME Bugzilla bug 301558 provided by
1146 GtkTreeModel *filter;
1148 GtkTreeIter root, iter, iter2;
1153 tree = gtk_tree_store_new (2, G_TYPE_INT, G_TYPE_BOOLEAN);
1154 gtk_tree_store_append (tree, &iter, NULL);
1155 gtk_tree_store_set (tree, &iter, 0, 123, 1, TRUE, -1);
1156 gtk_tree_store_append (tree, &iter2, &iter);
1157 gtk_tree_store_set (tree, &iter2, 0, 73, 1, TRUE, -1);
1159 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (tree));
1160 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
1161 specific_bug_301558_sort_func,
1164 filter = gtk_tree_model_filter_new (sort, NULL);
1165 gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter), 1);
1167 view = gtk_tree_view_new_with_model (filter);
1169 while (gtk_events_pending ())
1170 gtk_main_iteration ();
1174 for (i = 0; i < 10; i++)
1176 if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (tree), &root))
1177 g_assert_not_reached ();
1181 gtk_tree_store_append (tree, &iter, &root);
1182 gtk_tree_store_set (tree, &iter, 0, 456, 1, TRUE, -1);
1187 n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (tree), &root);
1188 gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (tree), &iter,
1190 gtk_tree_store_remove (tree, &iter);
1199 specific_bug_311955_filter_func (GtkTreeModel *model,
1205 gtk_tree_model_get (model, iter, 0, &value, -1);
1207 return (value != 0);
1211 specific_bug_311955 (void)
1213 /* This is a test case for GNOME Bugzilla bug 311955. It was written
1216 GtkTreeIter iter, child, root;
1217 GtkTreeStore *store;
1219 GtkTreeModel *filter;
1222 GtkWidget *tree_view;
1226 store = gtk_tree_store_new (1, G_TYPE_INT);
1228 gtk_tree_store_append (store, &root, NULL);
1229 gtk_tree_store_set (store, &root, 0, 33, -1);
1231 gtk_tree_store_append (store, &iter, &root);
1232 gtk_tree_store_set (store, &iter, 0, 50, -1);
1234 gtk_tree_store_append (store, &iter, NULL);
1235 gtk_tree_store_set (store, &iter, 0, 22, -1);
1237 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1238 filter = gtk_tree_model_filter_new (sort, NULL);
1240 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
1241 specific_bug_311955_filter_func,
1244 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1245 tree_view = gtk_tree_view_new_with_model (filter);
1246 g_object_unref (store);
1248 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
1250 while (gtk_events_pending ())
1251 gtk_main_iteration ();
1254 for (i = 0; i < 4; i++)
1256 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
1258 gtk_tree_store_append (store, &iter, &root);
1261 gtk_tree_store_set (store, &iter, 0, i, -1);
1265 gtk_tree_store_append (store, &child, &iter);
1266 gtk_tree_store_set (store, &child, 0, 10, -1);
1270 while (gtk_events_pending ())
1271 gtk_main_iteration ();
1273 /* Remove bottommost child from the tree. */
1274 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
1275 n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), &root);
1277 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, &root, n - 2))
1279 if (gtk_tree_model_iter_children (GTK_TREE_MODEL (store), &child, &iter))
1280 gtk_tree_store_remove (store, &child);
1283 g_assert_not_reached ();
1287 specific_bug_346800 (void)
1289 /* This is a test case for GNOME Bugzilla bug 346800. It was written
1290 * by Jonathan Matthew.
1293 GtkTreeIter node_iters[50];
1294 GtkTreeIter child_iters[50];
1295 GtkTreeModel *model;
1296 GtkTreeModelFilter *filter;
1297 GtkTreeStore *store;
1301 columns = g_new (GType, 2);
1302 columns[0] = G_TYPE_STRING;
1303 columns[1] = G_TYPE_BOOLEAN;
1304 store = gtk_tree_store_newv (2, columns);
1305 model = GTK_TREE_MODEL (store);
1307 filter = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (model, NULL));
1308 gtk_tree_model_filter_set_visible_column (filter, 1);
1310 for (i=0; i<items; i++)
1312 /* allocate random amounts of junk, otherwise the filter model's arrays can expand without moving */
1315 gtk_tree_store_append (store, &node_iters[i], NULL);
1316 gtk_tree_store_set (store, &node_iters[i],
1318 1, ((i%6) == 0) ? FALSE : TRUE,
1322 gtk_tree_store_append (store, &child_iters[i], &node_iters[i]);
1323 gtk_tree_store_set (store, &child_iters[i],
1324 0, "something else",
1327 gtk_tree_model_filter_refilter (filter);
1331 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-1], 1,
1332 (i & 1) ? TRUE : FALSE, -1);
1333 gtk_tree_model_filter_refilter (filter);
1335 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-2], 1,
1336 (i & 1) ? FALSE: TRUE, -1);
1337 gtk_tree_model_filter_refilter (filter);
1344 specific_bug_364946 (void)
1346 /* This is a test case for GNOME Bugzilla bug 364946. It was written
1347 * by Andreas Koehler.
1349 GtkTreeStore *store;
1350 GtkTreeIter a, aa, aaa, aab, iter;
1351 GtkTreeModel *s_model;
1353 store = gtk_tree_store_new (1, G_TYPE_STRING);
1355 gtk_tree_store_append (store, &a, NULL);
1356 gtk_tree_store_set (store, &a, 0, "0", -1);
1358 gtk_tree_store_append (store, &aa, &a);
1359 gtk_tree_store_set (store, &aa, 0, "0:0", -1);
1361 gtk_tree_store_append (store, &aaa, &aa);
1362 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1364 gtk_tree_store_append (store, &aab, &aa);
1365 gtk_tree_store_set (store, &aab, 0, "0:0:1", -1);
1367 s_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1368 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (s_model), 0,
1369 GTK_SORT_ASCENDING);
1371 gtk_tree_model_get_iter_from_string (s_model, &iter, "0:0:0");
1373 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1374 gtk_tree_store_remove (store, &aaa);
1375 gtk_tree_store_remove (store, &aab);
1377 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (s_model));
1382 specific_bug_464173_visible_func (GtkTreeModel *model,
1386 gboolean *visible = (gboolean *)data;
1392 specific_bug_464173 (void)
1394 /* Test case for GNOME Bugzilla bug 464173, test case written
1395 * by Andreas Koehler.
1397 GtkTreeStore *model;
1398 GtkTreeModelFilter *f_model;
1399 GtkTreeIter iter1, iter2;
1401 gboolean visible = TRUE;
1403 model = gtk_tree_store_new (1, G_TYPE_STRING);
1404 gtk_tree_store_append (model, &iter1, NULL);
1405 gtk_tree_store_set (model, &iter1, 0, "Foo", -1);
1406 gtk_tree_store_append (model, &iter2, &iter1);
1407 gtk_tree_store_set (model, &iter2, 0, "Bar", -1);
1409 f_model = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL(model), NULL));
1410 gtk_tree_model_filter_set_visible_func (f_model,
1411 specific_bug_464173_visible_func,
1414 view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (f_model));
1417 gtk_tree_model_filter_refilter (f_model);
1422 specific_bug_540201_filter_func (GtkTreeModel *model,
1426 gboolean has_children;
1428 has_children = gtk_tree_model_iter_has_child (model, iter);
1430 return has_children;
1434 specific_bug_540201 (void)
1436 /* Test case for GNOME Bugzilla bug 540201, steps provided by
1439 GtkTreeIter iter, root;
1440 GtkTreeStore *store;
1441 GtkTreeModel *filter;
1443 GtkWidget *tree_view;
1445 store = gtk_tree_store_new (1, G_TYPE_INT);
1447 gtk_tree_store_append (store, &root, NULL);
1448 gtk_tree_store_set (store, &root, 0, 33, -1);
1450 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1451 tree_view = gtk_tree_view_new_with_model (filter);
1453 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
1454 specific_bug_540201_filter_func,
1457 gtk_tree_store_append (store, &iter, &root);
1458 gtk_tree_store_set (store, &iter, 0, 50, -1);
1460 gtk_tree_store_append (store, &iter, &root);
1461 gtk_tree_store_set (store, &iter, 0, 22, -1);
1464 gtk_tree_store_append (store, &root, NULL);
1465 gtk_tree_store_set (store, &root, 0, 33, -1);
1467 gtk_tree_store_append (store, &iter, &root);
1468 gtk_tree_store_set (store, &iter, 0, 22, -1);
1473 specific_bug_549287_visible_func (GtkTreeModel *model,
1477 gboolean result = FALSE;
1479 result = gtk_tree_model_iter_has_child (model, iter);
1485 specific_bug_549287 (void)
1487 /* Test case for GNOME Bugzilla bug 529287, provided by Julient Puydt */
1490 GtkTreeStore *store;
1491 GtkTreeModel *filtered;
1494 GtkTreeIter *swap, *parent, *child;
1496 store = gtk_tree_store_new (1, G_TYPE_STRING);
1497 filtered = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1498 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filtered),
1499 specific_bug_549287_visible_func,
1502 view = gtk_tree_view_new_with_model (filtered);
1504 for (i = 0; i < 4; i++)
1506 if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
1508 parent = gtk_tree_iter_copy (&iter);
1509 child = gtk_tree_iter_copy (&iter);
1511 while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store),
1520 gtk_tree_store_append (store, child, parent);
1521 gtk_tree_store_set (store, child,
1525 gtk_tree_iter_free (parent);
1526 gtk_tree_iter_free (child);
1530 gtk_tree_store_append (store, &iter, NULL);
1531 gtk_tree_store_set (store, &iter,
1536 /* since we inserted something, we changed the visibility conditions: */
1537 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filtered));
1547 gtk_test_init (&argc, &argv, NULL);
1549 g_test_add ("/FilterModel/self/verify-test-suite",
1553 filter_test_teardown);
1555 g_test_add ("/FilterModel/self/verify-test-suite/vroot/depth-1",
1556 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1558 verify_test_suite_vroot,
1559 filter_test_teardown);
1560 g_test_add ("/FilterModel/self/verify-test-suite/vroot/depth-2",
1561 FilterTest, gtk_tree_path_new_from_indices (2, 3, -1),
1563 verify_test_suite_vroot,
1564 filter_test_teardown);
1567 g_test_add ("/FilterModel/filled/hide-root-level",
1570 filled_hide_root_level,
1571 filter_test_teardown);
1572 g_test_add ("/FilterModel/filled/hide-child-levels",
1575 filled_hide_child_levels,
1576 filter_test_teardown);
1578 g_test_add ("/FilterModel/filled/hide-root-level/vroot",
1579 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1581 filled_vroot_hide_root_level,
1582 filter_test_teardown);
1583 g_test_add ("/FilterModel/filled/hide-child-levels/vroot",
1584 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1586 filled_vroot_hide_child_levels,
1587 filter_test_teardown);
1590 g_test_add ("/FilterModel/empty/show-nodes",
1592 filter_test_setup_empty,
1594 filter_test_teardown);
1596 g_test_add ("/FilterModel/empty/show-nodes/vroot",
1597 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1598 filter_test_setup_empty,
1599 empty_vroot_show_nodes,
1600 filter_test_teardown);
1603 g_test_add ("/FilterModel/unfiltered/hide-single",
1605 filter_test_setup_unfiltered,
1606 unfiltered_hide_single,
1607 filter_test_teardown);
1608 g_test_add ("/FilterModel/unfiltered/hide-single-child",
1610 filter_test_setup_unfiltered,
1611 unfiltered_hide_single_child,
1612 filter_test_teardown);
1613 g_test_add ("/FilterModel/unfiltered/hide-single-multi-level",
1615 filter_test_setup_unfiltered,
1616 unfiltered_hide_single_multi_level,
1617 filter_test_teardown);
1619 g_test_add ("/FilterModel/unfiltered/show-single",
1621 filter_test_setup_empty_unfiltered,
1622 unfiltered_show_single,
1623 filter_test_teardown);
1624 g_test_add ("/FilterModel/unfiltered/show-single-child",
1626 filter_test_setup_empty_unfiltered,
1627 unfiltered_show_single_child,
1628 filter_test_teardown);
1629 g_test_add ("/FilterModel/unfiltered/show-single-multi-level",
1631 filter_test_setup_empty_unfiltered,
1632 unfiltered_show_single_multi_level,
1633 filter_test_teardown);
1636 g_test_add_func ("/FilterModel/specific/path-dependent-filter",
1637 specific_path_dependent_filter);
1638 g_test_add_func ("/FilterModel/specific/append-after-collapse",
1639 specific_append_after_collapse);
1640 g_test_add_func ("/FilterModel/specific/sort-filter-remove-node",
1641 specific_sort_filter_remove_node);
1642 g_test_add_func ("/FilterModel/specific/sort-filter-remove-root",
1643 specific_sort_filter_remove_root);
1644 g_test_add_func ("/FilterModel/specific/filter-add-child",
1645 specific_filter_add_child);
1647 g_test_add_func ("/FilterModel/specific/bug-300089",
1648 specific_bug_300089);
1649 g_test_add_func ("/FilterModel/specific/bug-301558",
1650 specific_bug_301558);
1651 g_test_add_func ("/FilterModel/specific/bug-311955",
1652 specific_bug_311955);
1653 g_test_add_func ("/FilterModel/specific/bug-346800",
1654 specific_bug_346800);
1655 g_test_add_func ("/FilterModel/specific/bug-364946",
1656 specific_bug_364946);
1657 g_test_add_func ("/FilterModel/specific/bug-464173",
1658 specific_bug_464173);
1659 g_test_add_func ("/FilterModel/specific/bug-540201",
1660 specific_bug_540201);
1661 g_test_add_func ("/FilterModel/specific/bug-549287",
1662 specific_bug_549287);
1664 return g_test_run ();