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);
279 gboolean retrieved_iter = FALSE;
282 retrieved_iter = gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (filter),
284 g_return_if_fail (retrieved_iter);
285 l = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (filter), &iter);
286 g_return_if_fail (l == length);
291 set_path_visibility (FilterTest *fixture,
295 GtkTreeIter store_iter;
297 gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (fixture->store),
299 gtk_tree_store_set (fixture->store, &store_iter,
305 insert_path_with_visibility (FilterTest *fixture,
306 const gchar *path_string,
311 GtkTreeIter parent, iter;
313 path = gtk_tree_path_new_from_string (path_string);
314 position = gtk_tree_path_get_indices (path)[gtk_tree_path_get_depth (path)];
315 gtk_tree_path_up (path);
317 if (gtk_tree_model_get_iter (GTK_TREE_MODEL (fixture->store), &parent, path))
319 gtk_tree_store_insert (fixture->store, &iter, &parent, position);
320 create_tree_store_set_values (fixture->store, &iter, visible);
322 gtk_tree_path_free (path);
330 verify_test_suite (FilterTest *fixture,
331 gconstpointer user_data)
333 check_filter_model (fixture);
337 verify_test_suite_vroot (FilterTest *fixture,
338 gconstpointer user_data)
340 check_filter_model_with_root (fixture, (GtkTreePath *)user_data);
345 filled_hide_root_level (FilterTest *fixture,
346 gconstpointer user_data)
348 set_path_visibility (fixture, "2", FALSE);
349 check_filter_model (fixture);
350 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
352 set_path_visibility (fixture, "0", FALSE);
353 check_filter_model (fixture);
354 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
356 set_path_visibility (fixture, "4", FALSE);
357 check_filter_model (fixture);
358 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 3);
362 set_path_visibility (fixture, "1", FALSE);
363 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
365 set_path_visibility (fixture, "3", FALSE);
366 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 5);
368 check_filter_model (fixture);
371 set_path_visibility (fixture, "1", TRUE);
372 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
374 set_path_visibility (fixture, "3", TRUE);
375 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 3);
377 check_filter_model (fixture);
381 filled_hide_child_levels (FilterTest *fixture,
382 gconstpointer user_data)
384 set_path_visibility (fixture, "0:2", FALSE);
385 check_filter_model (fixture);
386 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
387 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
389 set_path_visibility (fixture, "0:4", FALSE);
390 check_filter_model (fixture);
391 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
392 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
394 set_path_visibility (fixture, "0:4:3", FALSE);
395 check_filter_model (fixture);
396 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
397 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
399 set_path_visibility (fixture, "0:4:0", FALSE);
400 set_path_visibility (fixture, "0:4:1", FALSE);
401 set_path_visibility (fixture, "0:4:2", FALSE);
402 set_path_visibility (fixture, "0:4:4", FALSE);
403 check_filter_model (fixture);
404 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
405 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
407 set_path_visibility (fixture, "0:4", TRUE);
408 /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
409 check_filter_model (fixture);
410 check_level_length (fixture->filter, "0:3", 0);
412 set_path_visibility (fixture, "0:2", TRUE);
413 check_filter_model (fixture);
414 check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
415 check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
416 check_level_length (fixture->filter, "0:4", 0);
418 set_path_visibility (fixture, "0:4:2", TRUE);
419 set_path_visibility (fixture, "0:4:4", TRUE);
420 check_level_length (fixture->filter, "0:4", 2);
425 filled_vroot_hide_root_level (FilterTest *fixture,
426 gconstpointer user_data)
428 GtkTreePath *path = (GtkTreePath *)user_data;
430 /* These changes do not affect the filter's root level */
431 set_path_visibility (fixture, "0", FALSE);
432 check_filter_model_with_root (fixture, path);
433 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
434 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
436 set_path_visibility (fixture, "4", FALSE);
437 check_filter_model_with_root (fixture, path);
438 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
439 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
441 /* Even though we set the virtual root parent node to FALSE,
442 * the virtual root contents remain.
444 set_path_visibility (fixture, "2", FALSE);
445 check_filter_model_with_root (fixture, path);
446 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
447 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
450 set_path_visibility (fixture, "1", FALSE);
451 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
452 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
454 set_path_visibility (fixture, "3", FALSE);
455 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
456 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
458 check_filter_model_with_root (fixture, path);
461 set_path_visibility (fixture, "2", TRUE);
462 check_filter_model_with_root (fixture, path);
463 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
464 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
466 set_path_visibility (fixture, "1", TRUE);
467 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
468 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
470 set_path_visibility (fixture, "3", TRUE);
471 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
472 check_level_length (fixture->filter, "0", LEVEL_LENGTH);
474 check_filter_model_with_root (fixture, path);
476 /* Now test changes in the virtual root level */
477 set_path_visibility (fixture, "2:2", FALSE);
478 check_filter_model_with_root (fixture, path);
479 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
481 set_path_visibility (fixture, "2:4", FALSE);
482 check_filter_model_with_root (fixture, path);
483 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
485 set_path_visibility (fixture, "1:4", FALSE);
486 check_filter_model_with_root (fixture, path);
487 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
489 set_path_visibility (fixture, "2:4", TRUE);
490 check_filter_model_with_root (fixture, path);
491 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
493 set_path_visibility (fixture, "2", FALSE);
494 check_filter_model_with_root (fixture, path);
495 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
497 set_path_visibility (fixture, "2:0", FALSE);
498 set_path_visibility (fixture, "2:1", FALSE);
499 set_path_visibility (fixture, "2:2", FALSE);
500 set_path_visibility (fixture, "2:3", FALSE);
501 set_path_visibility (fixture, "2:4", FALSE);
502 check_filter_model_with_root (fixture, path);
503 check_level_length (fixture->filter, NULL, 0);
505 set_path_visibility (fixture, "2", TRUE);
506 check_filter_model_with_root (fixture, path);
507 check_level_length (fixture->filter, NULL, 0);
509 set_path_visibility (fixture, "1:4", FALSE);
510 check_filter_model_with_root (fixture, path);
511 check_level_length (fixture->filter, NULL, 0);
513 set_path_visibility (fixture, "2:4", TRUE);
514 check_filter_model_with_root (fixture, path);
515 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 4);
517 set_path_visibility (fixture, "2:4", FALSE);
518 check_filter_model_with_root (fixture, path);
519 check_level_length (fixture->filter, NULL, 0);
521 set_path_visibility (fixture, "2", FALSE);
522 check_filter_model_with_root (fixture, path);
523 check_level_length (fixture->filter, NULL, 0);
525 set_path_visibility (fixture, "2:0", TRUE);
526 set_path_visibility (fixture, "2:1", TRUE);
527 set_path_visibility (fixture, "2:2", TRUE);
528 check_filter_model_with_root (fixture, path);
529 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
531 set_path_visibility (fixture, "2", TRUE);
532 check_filter_model_with_root (fixture, path);
533 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 2);
537 filled_vroot_hide_child_levels (FilterTest *fixture,
538 gconstpointer user_data)
540 GtkTreePath *path = (GtkTreePath *)user_data;
542 set_path_visibility (fixture, "2:0:2", FALSE);
543 check_filter_model_with_root (fixture, path);
544 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
545 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 1);
547 set_path_visibility (fixture, "2:0:4", FALSE);
548 check_filter_model_with_root (fixture, path);
549 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
550 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
552 set_path_visibility (fixture, "2:0:4:3", FALSE);
553 check_filter_model_with_root (fixture, path);
554 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
555 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
557 set_path_visibility (fixture, "2:0:4:0", FALSE);
558 set_path_visibility (fixture, "2:0:4:1", FALSE);
559 set_path_visibility (fixture, "2:0:4:2", FALSE);
560 set_path_visibility (fixture, "2:0:4:4", FALSE);
561 check_filter_model_with_root (fixture, path);
562 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
563 check_level_length (fixture->filter, "0", LEVEL_LENGTH - 2);
565 set_path_visibility (fixture, "2:0:4", TRUE);
566 /* Since "0:2" is hidden, "0:4" must be "0:3" in the filter model */
567 check_filter_model_with_root (fixture, path);
568 check_level_length (fixture->filter, "0:3", 0);
570 set_path_visibility (fixture, "2:0:2", TRUE);
571 check_filter_model_with_root (fixture, path);
572 check_level_length (fixture->filter, "0:2", LEVEL_LENGTH);
573 check_level_length (fixture->filter, "0:3", LEVEL_LENGTH);
574 check_level_length (fixture->filter, "0:4", 0);
576 set_path_visibility (fixture, "2:0:4:2", TRUE);
577 set_path_visibility (fixture, "2:0:4:4", TRUE);
578 check_level_length (fixture->filter, "0:4", 2);
583 empty_show_nodes (FilterTest *fixture,
584 gconstpointer user_data)
586 check_filter_model (fixture);
587 check_level_length (fixture->filter, NULL, 0);
589 set_path_visibility (fixture, "3", TRUE);
590 check_filter_model (fixture);
591 check_level_length (fixture->filter, NULL, 1);
592 check_level_length (fixture->filter, "0", 0);
594 set_path_visibility (fixture, "3:2:2", TRUE);
595 check_filter_model (fixture);
596 check_level_length (fixture->filter, NULL, 1);
597 check_level_length (fixture->filter, "0", 0);
599 set_path_visibility (fixture, "3:2", TRUE);
600 check_filter_model (fixture);
601 check_level_length (fixture->filter, NULL, 1);
602 check_level_length (fixture->filter, "0", 1);
603 check_level_length (fixture->filter, "0:0", 1);
604 check_level_length (fixture->filter, "0:0:0", 0);
606 set_path_visibility (fixture, "3", FALSE);
607 check_filter_model (fixture);
608 check_level_length (fixture->filter, NULL, 0);
610 set_path_visibility (fixture, "3:2:1", TRUE);
611 set_path_visibility (fixture, "3", TRUE);
612 check_filter_model (fixture);
613 check_level_length (fixture->filter, NULL, 1);
614 check_level_length (fixture->filter, "0", 1);
615 check_level_length (fixture->filter, "0:0", 2);
616 check_level_length (fixture->filter, "0:0:0", 0);
620 empty_vroot_show_nodes (FilterTest *fixture,
621 gconstpointer user_data)
623 GtkTreePath *path = (GtkTreePath *)user_data;
625 check_filter_model_with_root (fixture, path);
626 check_level_length (fixture->filter, NULL, 0);
628 set_path_visibility (fixture, "2", TRUE);
629 check_filter_model_with_root (fixture, path);
630 check_level_length (fixture->filter, NULL, 0);
632 set_path_visibility (fixture, "2:2:2", TRUE);
633 check_filter_model_with_root (fixture, path);
634 check_level_length (fixture->filter, NULL, 0);
636 set_path_visibility (fixture, "2:2", TRUE);
637 check_filter_model_with_root (fixture, path);
638 check_level_length (fixture->filter, NULL, 1);
639 check_level_length (fixture->filter, "0", 1);
640 check_level_length (fixture->filter, "0:0", 0);
642 set_path_visibility (fixture, "3", TRUE);
643 check_filter_model_with_root (fixture, path);
644 check_level_length (fixture->filter, NULL, 1);
646 set_path_visibility (fixture, "2:2", FALSE);
647 check_filter_model_with_root (fixture, path);
648 check_level_length (fixture->filter, NULL, 0);
650 set_path_visibility (fixture, "2:2:1", TRUE);
651 set_path_visibility (fixture, "2:2", TRUE);
652 check_filter_model_with_root (fixture, path);
653 check_level_length (fixture->filter, NULL, 1);
654 check_level_length (fixture->filter, "0", 2);
655 check_level_length (fixture->filter, "0:1", 0);
660 unfiltered_hide_single (FilterTest *fixture,
661 gconstpointer user_data)
664 set_path_visibility (fixture, "2", FALSE);
666 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
668 filter_test_enable_filter (fixture);
670 check_filter_model (fixture);
671 check_level_length (fixture->filter, NULL, LEVEL_LENGTH - 1);
675 unfiltered_hide_single_child (FilterTest *fixture,
676 gconstpointer user_data)
679 set_path_visibility (fixture, "2:2", FALSE);
681 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
682 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
684 filter_test_enable_filter (fixture);
686 check_filter_model (fixture);
687 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
688 check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
692 unfiltered_hide_single_multi_level (FilterTest *fixture,
693 gconstpointer user_data)
696 set_path_visibility (fixture, "2:2:2", FALSE);
697 set_path_visibility (fixture, "2:2", FALSE);
699 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
700 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
701 check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
703 filter_test_enable_filter (fixture);
705 check_filter_model (fixture);
706 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
707 check_level_length (fixture->filter, "2", LEVEL_LENGTH - 1);
709 set_path_visibility (fixture, "2:2", TRUE);
711 check_filter_model (fixture);
712 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
713 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
714 check_level_length (fixture->filter, "2:2", LEVEL_LENGTH - 1);
719 unfiltered_show_single (FilterTest *fixture,
720 gconstpointer user_data)
723 set_path_visibility (fixture, "2", TRUE);
725 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
727 filter_test_enable_filter (fixture);
729 check_filter_model (fixture);
730 check_level_length (fixture->filter, NULL, 1);
734 unfiltered_show_single_child (FilterTest *fixture,
735 gconstpointer user_data)
738 set_path_visibility (fixture, "2:2", TRUE);
740 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
741 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
743 filter_test_enable_filter (fixture);
745 check_filter_model (fixture);
746 check_level_length (fixture->filter, NULL, 0);
748 set_path_visibility (fixture, "2", TRUE);
749 check_level_length (fixture->filter, NULL, 1);
750 check_level_length (fixture->filter, "2", 1);
754 unfiltered_show_single_multi_level (FilterTest *fixture,
755 gconstpointer user_data)
758 set_path_visibility (fixture, "2:2:2", TRUE);
759 set_path_visibility (fixture, "2:2", TRUE);
761 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
762 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
763 check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
765 filter_test_enable_filter (fixture);
767 check_filter_model (fixture);
768 check_level_length (fixture->filter, NULL, 0);
770 set_path_visibility (fixture, "2", TRUE);
771 check_filter_model (fixture);
772 check_level_length (fixture->filter, NULL, 1);
773 check_level_length (fixture->filter, "2", 1);
774 check_level_length (fixture->filter, "2:2", 1);
779 specific_path_dependent_filter_func (GtkTreeModel *model,
785 path = gtk_tree_model_get_path (model, iter);
786 if (gtk_tree_path_get_indices (path)[0] < 4)
793 specific_path_dependent_filter (void)
799 GtkTreeModel *filter;
801 list = gtk_list_store_new (1, G_TYPE_INT);
802 gtk_list_store_insert_with_values (list, &iter, 0, 0, 1, -1);
803 gtk_list_store_insert_with_values (list, &iter, 1, 0, 2, -1);
804 gtk_list_store_insert_with_values (list, &iter, 2, 0, 3, -1);
805 gtk_list_store_insert_with_values (list, &iter, 3, 0, 4, -1);
806 gtk_list_store_insert_with_values (list, &iter, 4, 0, 5, -1);
807 gtk_list_store_insert_with_values (list, &iter, 5, 0, 6, -1);
808 gtk_list_store_insert_with_values (list, &iter, 6, 0, 7, -1);
809 gtk_list_store_insert_with_values (list, &iter, 7, 0, 8, -1);
811 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (list));
812 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (sort), NULL);
813 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
814 specific_path_dependent_filter_func,
817 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort), 0,
818 GTK_SORT_DESCENDING);
820 for (i = 0; i < 4; i++)
822 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
824 gtk_list_store_remove (list, &iter);
826 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
828 gtk_list_store_remove (list, &iter);
834 specific_append_after_collapse_visible_func (GtkTreeModel *model,
839 gboolean hide_negative_numbers;
841 gtk_tree_model_get (model, iter, 1, &number, -1);
842 hide_negative_numbers = GPOINTER_TO_INT (g_object_get_data (data, "private-hide-negative-numbers"));
844 return (number >= 0 || !hide_negative_numbers);
848 specific_append_after_collapse (void)
850 /* This test is based on one of the test cases I found in my
851 * old test cases directory. I unfortunately do not have a record
852 * from who this test case originated. -Kris.
856 * - Show tree, expand, collapse.
861 GtkTreeIter child_iter;
862 GtkTreeIter child_iter2;
863 GtkTreePath *append_path;
865 GtkTreeModel *filter;
869 GtkWidget *tree_view;
871 store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_INT);
873 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
874 g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
875 GINT_TO_POINTER (FALSE));
876 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
877 specific_append_after_collapse_visible_func,
880 sort = gtk_tree_model_sort_new_with_model (filter);
882 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
883 tree_view = gtk_tree_view_new_with_model (sort);
884 gtk_container_add (GTK_CONTAINER (window), tree_view);
885 gtk_widget_realize (tree_view);
887 while (gtk_events_pending ())
888 gtk_main_iteration ();
890 gtk_tree_store_prepend (store, &iter, NULL);
891 gtk_tree_store_set (store, &iter,
892 0, "hallo", 1, 1, -1);
894 gtk_tree_store_append (store, &child_iter, &iter);
895 gtk_tree_store_set (store, &child_iter,
896 0, "toemaar", 1, 1, -1);
898 gtk_tree_store_append (store, &child_iter2, &child_iter);
899 gtk_tree_store_set (store, &child_iter2,
900 0, "very deep", 1, 1, -1);
902 append_path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &child_iter2);
904 gtk_tree_store_append (store, &child_iter, &iter);
905 gtk_tree_store_set (store, &child_iter,
908 gtk_tree_store_append (store, &child_iter, &iter);
909 gtk_tree_store_set (store, &child_iter,
910 0, "some word", 1, -1, -1);
912 /* Expand and collapse the tree */
913 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
914 while (gtk_events_pending ())
915 gtk_main_iteration ();
917 gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
918 while (gtk_events_pending ())
919 gtk_main_iteration ();
922 g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
923 GINT_TO_POINTER (TRUE));
925 if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, append_path))
927 gtk_tree_store_append (store, &child_iter, &iter);
928 gtk_tree_store_set (store, &child_iter,
929 0, "new new new !!", 1, 1, -1);
931 gtk_tree_path_free (append_path);
934 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
935 while (gtk_events_pending ())
936 gtk_main_iteration ();
941 specific_sort_filter_remove_node_compare_func (GtkTreeModel *model,
950 specific_sort_filter_remove_node_visible_func (GtkTreeModel *model,
956 /* Do reference the model */
957 gtk_tree_model_get (model, iter, 0, &item, -1);
964 specific_sort_filter_remove_node (void)
966 /* This test is based on one of the test cases I found in my
967 * old test cases directory. I unfortunately do not have a record
968 * from who this test case originated. -Kris.
971 * - Create tree store, sort, filter models. The sort model has
972 * a default sort func that is enabled, filter model a visible func
973 * that defaults to returning FALSE.
974 * - Remove a node from the tree store.
979 GtkTreeModel *filter;
983 GtkWidget *tree_view;
985 store = gtk_tree_store_new (1, G_TYPE_STRING);
986 gtk_tree_store_append (store, &iter, NULL);
987 gtk_tree_store_set (store, &iter, 0, "Hello1", -1);
989 gtk_tree_store_append (store, &iter, NULL);
990 gtk_tree_store_set (store, &iter, 0, "Hello2", -1);
992 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
993 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
994 specific_sort_filter_remove_node_compare_func, NULL, NULL);
996 filter = gtk_tree_model_filter_new (sort, NULL);
997 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
998 specific_sort_filter_remove_node_visible_func,
1002 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1003 tree_view = gtk_tree_view_new_with_model (filter);
1004 gtk_container_add (GTK_CONTAINER (window), tree_view);
1005 gtk_widget_realize (tree_view);
1007 while (gtk_events_pending ())
1008 gtk_main_iteration ();
1011 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
1012 gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
1013 gtk_tree_store_remove (store, &iter);
1015 while (gtk_events_pending ())
1016 gtk_main_iteration ();
1021 specific_sort_filter_remove_root (void)
1023 /* This test is based on one of the test cases I found in my
1024 * old test cases directory. I unfortunately do not have a record
1025 * from who this test case originated. -Kris.
1028 GtkTreeModel *model, *sort, *filter;
1029 GtkTreeIter root, mid, leaf;
1032 model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_INT));
1033 gtk_tree_store_append (GTK_TREE_STORE (model), &root, NULL);
1034 gtk_tree_store_append (GTK_TREE_STORE (model), &mid, &root);
1035 gtk_tree_store_append (GTK_TREE_STORE (model), &leaf, &mid);
1037 path = gtk_tree_model_get_path (model, &mid);
1039 sort = gtk_tree_model_sort_new_with_model (model);
1040 filter = gtk_tree_model_filter_new (sort, path);
1042 gtk_tree_store_remove (GTK_TREE_STORE (model), &root);
1044 g_object_unref (filter);
1045 g_object_unref (sort);
1046 g_object_unref (model);
1051 specific_filter_add_child (void)
1053 /* This test is based on one of the test cases I found in my
1054 * old test cases directory. I unfortunately do not have a record
1055 * from who this test case originated. -Kris.
1059 GtkTreeIter iter_first;
1061 GtkTreeStore *store;
1062 GtkTreeModel *filter;
1064 store = gtk_tree_store_new (1, G_TYPE_STRING);
1066 gtk_tree_store_append (store, &iter_first, NULL);
1067 gtk_tree_store_set (store, &iter_first, 0, "Hello", -1);
1069 gtk_tree_store_append (store, &iter, NULL);
1070 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1072 gtk_tree_store_append (store, &iter, NULL);
1073 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1075 gtk_tree_store_append (store, &iter, NULL);
1076 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1078 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1080 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1081 gtk_tree_store_append (store, &child, &iter_first);
1082 gtk_tree_store_set (store, &child, 0, "Hello", -1);
1087 specific_bug_300089 (void)
1089 /* Test case for GNOME Bugzilla bug 300089. Written by
1092 GtkTreeModel *sort_model, *child_model;
1094 GtkTreeIter iter, iter2, sort_iter;
1096 child_model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_STRING));
1098 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1099 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1100 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1101 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "B", -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, "D", -1);
1105 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1106 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "E", -1);
1108 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1109 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "C", -1);
1112 sort_model = GTK_TREE_MODEL (gtk_tree_model_sort_new_with_model (child_model));
1113 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
1114 0, GTK_SORT_ASCENDING);
1116 path = gtk_tree_path_new_from_indices (1, 1, -1);
1118 /* make sure a level is constructed */
1119 gtk_tree_model_get_iter (sort_model, &sort_iter, path);
1121 /* change the "E" row in a way that causes it to change position */
1122 gtk_tree_model_get_iter (child_model, &iter, path);
1123 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1128 specific_bug_301558_sort_func (GtkTreeModel *model,
1135 gtk_tree_model_get (model, a, 0, &i, -1);
1136 gtk_tree_model_get (model, b, 0, &j, -1);
1142 specific_bug_301558 (void)
1144 /* Test case for GNOME Bugzilla bug 301558 provided by
1148 GtkTreeModel *filter;
1150 GtkTreeIter root, iter, iter2;
1155 tree = gtk_tree_store_new (2, G_TYPE_INT, G_TYPE_BOOLEAN);
1156 gtk_tree_store_append (tree, &iter, NULL);
1157 gtk_tree_store_set (tree, &iter, 0, 123, 1, TRUE, -1);
1158 gtk_tree_store_append (tree, &iter2, &iter);
1159 gtk_tree_store_set (tree, &iter2, 0, 73, 1, TRUE, -1);
1161 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (tree));
1162 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
1163 specific_bug_301558_sort_func,
1166 filter = gtk_tree_model_filter_new (sort, NULL);
1167 gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter), 1);
1169 view = gtk_tree_view_new_with_model (filter);
1171 while (gtk_events_pending ())
1172 gtk_main_iteration ();
1176 for (i = 0; i < 10; i++)
1178 if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (tree), &root))
1179 g_assert_not_reached ();
1183 gtk_tree_store_append (tree, &iter, &root);
1184 gtk_tree_store_set (tree, &iter, 0, 456, 1, TRUE, -1);
1189 n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (tree), &root);
1190 gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (tree), &iter,
1192 gtk_tree_store_remove (tree, &iter);
1201 specific_bug_311955_filter_func (GtkTreeModel *model,
1207 gtk_tree_model_get (model, iter, 0, &value, -1);
1209 return (value != 0);
1213 specific_bug_311955 (void)
1215 /* This is a test case for GNOME Bugzilla bug 311955. It was written
1218 GtkTreeIter iter, child, root;
1219 GtkTreeStore *store;
1221 GtkTreeModel *filter;
1224 GtkWidget *tree_view;
1228 store = gtk_tree_store_new (1, G_TYPE_INT);
1230 gtk_tree_store_append (store, &root, NULL);
1231 gtk_tree_store_set (store, &root, 0, 33, -1);
1233 gtk_tree_store_append (store, &iter, &root);
1234 gtk_tree_store_set (store, &iter, 0, 50, -1);
1236 gtk_tree_store_append (store, &iter, NULL);
1237 gtk_tree_store_set (store, &iter, 0, 22, -1);
1239 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1240 filter = gtk_tree_model_filter_new (sort, NULL);
1242 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
1243 specific_bug_311955_filter_func,
1246 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1247 tree_view = gtk_tree_view_new_with_model (filter);
1248 g_object_unref (store);
1250 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
1252 while (gtk_events_pending ())
1253 gtk_main_iteration ();
1256 for (i = 0; i < 4; i++)
1258 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
1260 gtk_tree_store_append (store, &iter, &root);
1263 gtk_tree_store_set (store, &iter, 0, i, -1);
1267 gtk_tree_store_append (store, &child, &iter);
1268 gtk_tree_store_set (store, &child, 0, 10, -1);
1272 while (gtk_events_pending ())
1273 gtk_main_iteration ();
1275 /* Remove bottommost child from the tree. */
1276 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
1277 n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), &root);
1279 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, &root, n - 2))
1281 if (gtk_tree_model_iter_children (GTK_TREE_MODEL (store), &child, &iter))
1282 gtk_tree_store_remove (store, &child);
1285 g_assert_not_reached ();
1289 specific_bug_346800 (void)
1291 /* This is a test case for GNOME Bugzilla bug 346800. It was written
1292 * by Jonathan Matthew.
1295 GtkTreeIter node_iters[50];
1296 GtkTreeIter child_iters[50];
1297 GtkTreeModel *model;
1298 GtkTreeModelFilter *filter;
1299 GtkTreeStore *store;
1303 columns = g_new (GType, 2);
1304 columns[0] = G_TYPE_STRING;
1305 columns[1] = G_TYPE_BOOLEAN;
1306 store = gtk_tree_store_newv (2, columns);
1307 model = GTK_TREE_MODEL (store);
1309 filter = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (model, NULL));
1310 gtk_tree_model_filter_set_visible_column (filter, 1);
1312 for (i=0; i<items; i++)
1314 /* allocate random amounts of junk, otherwise the filter model's arrays can expand without moving */
1317 gtk_tree_store_append (store, &node_iters[i], NULL);
1318 gtk_tree_store_set (store, &node_iters[i],
1320 1, ((i%6) == 0) ? FALSE : TRUE,
1324 gtk_tree_store_append (store, &child_iters[i], &node_iters[i]);
1325 gtk_tree_store_set (store, &child_iters[i],
1326 0, "something else",
1329 gtk_tree_model_filter_refilter (filter);
1333 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-1], 1,
1334 (i & 1) ? TRUE : FALSE, -1);
1335 gtk_tree_model_filter_refilter (filter);
1337 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-2], 1,
1338 (i & 1) ? FALSE: TRUE, -1);
1339 gtk_tree_model_filter_refilter (filter);
1346 specific_bug_364946 (void)
1348 /* This is a test case for GNOME Bugzilla bug 364946. It was written
1349 * by Andreas Koehler.
1351 GtkTreeStore *store;
1352 GtkTreeIter a, aa, aaa, aab, iter;
1353 GtkTreeModel *s_model;
1355 store = gtk_tree_store_new (1, G_TYPE_STRING);
1357 gtk_tree_store_append (store, &a, NULL);
1358 gtk_tree_store_set (store, &a, 0, "0", -1);
1360 gtk_tree_store_append (store, &aa, &a);
1361 gtk_tree_store_set (store, &aa, 0, "0:0", -1);
1363 gtk_tree_store_append (store, &aaa, &aa);
1364 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1366 gtk_tree_store_append (store, &aab, &aa);
1367 gtk_tree_store_set (store, &aab, 0, "0:0:1", -1);
1369 s_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1370 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (s_model), 0,
1371 GTK_SORT_ASCENDING);
1373 gtk_tree_model_get_iter_from_string (s_model, &iter, "0:0:0");
1375 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1376 gtk_tree_store_remove (store, &aaa);
1377 gtk_tree_store_remove (store, &aab);
1379 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (s_model));
1384 specific_bug_464173_visible_func (GtkTreeModel *model,
1388 gboolean *visible = (gboolean *)data;
1394 specific_bug_464173 (void)
1396 /* Test case for GNOME Bugzilla bug 464173, test case written
1397 * by Andreas Koehler.
1399 GtkTreeStore *model;
1400 GtkTreeModelFilter *f_model;
1401 GtkTreeIter iter1, iter2;
1403 gboolean visible = TRUE;
1405 model = gtk_tree_store_new (1, G_TYPE_STRING);
1406 gtk_tree_store_append (model, &iter1, NULL);
1407 gtk_tree_store_set (model, &iter1, 0, "Foo", -1);
1408 gtk_tree_store_append (model, &iter2, &iter1);
1409 gtk_tree_store_set (model, &iter2, 0, "Bar", -1);
1411 f_model = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL(model), NULL));
1412 gtk_tree_model_filter_set_visible_func (f_model,
1413 specific_bug_464173_visible_func,
1416 view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (f_model));
1419 gtk_tree_model_filter_refilter (f_model);
1424 specific_bug_540201_filter_func (GtkTreeModel *model,
1428 gboolean has_children;
1430 has_children = gtk_tree_model_iter_has_child (model, iter);
1432 return has_children;
1436 specific_bug_540201 (void)
1438 /* Test case for GNOME Bugzilla bug 540201, steps provided by
1441 GtkTreeIter iter, root;
1442 GtkTreeStore *store;
1443 GtkTreeModel *filter;
1445 GtkWidget *tree_view;
1447 store = gtk_tree_store_new (1, G_TYPE_INT);
1449 gtk_tree_store_append (store, &root, NULL);
1450 gtk_tree_store_set (store, &root, 0, 33, -1);
1452 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1453 tree_view = gtk_tree_view_new_with_model (filter);
1455 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
1456 specific_bug_540201_filter_func,
1459 gtk_tree_store_append (store, &iter, &root);
1460 gtk_tree_store_set (store, &iter, 0, 50, -1);
1462 gtk_tree_store_append (store, &iter, &root);
1463 gtk_tree_store_set (store, &iter, 0, 22, -1);
1466 gtk_tree_store_append (store, &root, NULL);
1467 gtk_tree_store_set (store, &root, 0, 33, -1);
1469 gtk_tree_store_append (store, &iter, &root);
1470 gtk_tree_store_set (store, &iter, 0, 22, -1);
1475 specific_bug_549287_visible_func (GtkTreeModel *model,
1479 gboolean result = FALSE;
1481 result = gtk_tree_model_iter_has_child (model, iter);
1487 specific_bug_549287 (void)
1489 /* Test case for GNOME Bugzilla bug 529287, provided by Julient Puydt */
1492 GtkTreeStore *store;
1493 GtkTreeModel *filtered;
1496 GtkTreeIter *swap, *parent, *child;
1498 store = gtk_tree_store_new (1, G_TYPE_STRING);
1499 filtered = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1500 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filtered),
1501 specific_bug_549287_visible_func,
1504 view = gtk_tree_view_new_with_model (filtered);
1506 for (i = 0; i < 4; i++)
1508 if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
1510 parent = gtk_tree_iter_copy (&iter);
1511 child = gtk_tree_iter_copy (&iter);
1513 while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store),
1522 gtk_tree_store_append (store, child, parent);
1523 gtk_tree_store_set (store, child,
1527 gtk_tree_iter_free (parent);
1528 gtk_tree_iter_free (child);
1532 gtk_tree_store_append (store, &iter, NULL);
1533 gtk_tree_store_set (store, &iter,
1538 /* since we inserted something, we changed the visibility conditions: */
1539 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filtered));
1549 gtk_test_init (&argc, &argv, NULL);
1551 g_test_add ("/FilterModel/self/verify-test-suite",
1555 filter_test_teardown);
1557 g_test_add ("/FilterModel/self/verify-test-suite/vroot/depth-1",
1558 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1560 verify_test_suite_vroot,
1561 filter_test_teardown);
1562 g_test_add ("/FilterModel/self/verify-test-suite/vroot/depth-2",
1563 FilterTest, gtk_tree_path_new_from_indices (2, 3, -1),
1565 verify_test_suite_vroot,
1566 filter_test_teardown);
1569 g_test_add ("/FilterModel/filled/hide-root-level",
1572 filled_hide_root_level,
1573 filter_test_teardown);
1574 g_test_add ("/FilterModel/filled/hide-child-levels",
1577 filled_hide_child_levels,
1578 filter_test_teardown);
1580 g_test_add ("/FilterModel/filled/hide-root-level/vroot",
1581 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1583 filled_vroot_hide_root_level,
1584 filter_test_teardown);
1585 g_test_add ("/FilterModel/filled/hide-child-levels/vroot",
1586 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1588 filled_vroot_hide_child_levels,
1589 filter_test_teardown);
1592 g_test_add ("/FilterModel/empty/show-nodes",
1594 filter_test_setup_empty,
1596 filter_test_teardown);
1598 g_test_add ("/FilterModel/empty/show-nodes/vroot",
1599 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1600 filter_test_setup_empty,
1601 empty_vroot_show_nodes,
1602 filter_test_teardown);
1605 g_test_add ("/FilterModel/unfiltered/hide-single",
1607 filter_test_setup_unfiltered,
1608 unfiltered_hide_single,
1609 filter_test_teardown);
1610 g_test_add ("/FilterModel/unfiltered/hide-single-child",
1612 filter_test_setup_unfiltered,
1613 unfiltered_hide_single_child,
1614 filter_test_teardown);
1615 g_test_add ("/FilterModel/unfiltered/hide-single-multi-level",
1617 filter_test_setup_unfiltered,
1618 unfiltered_hide_single_multi_level,
1619 filter_test_teardown);
1621 g_test_add ("/FilterModel/unfiltered/show-single",
1623 filter_test_setup_empty_unfiltered,
1624 unfiltered_show_single,
1625 filter_test_teardown);
1626 g_test_add ("/FilterModel/unfiltered/show-single-child",
1628 filter_test_setup_empty_unfiltered,
1629 unfiltered_show_single_child,
1630 filter_test_teardown);
1631 g_test_add ("/FilterModel/unfiltered/show-single-multi-level",
1633 filter_test_setup_empty_unfiltered,
1634 unfiltered_show_single_multi_level,
1635 filter_test_teardown);
1638 g_test_add_func ("/FilterModel/specific/path-dependent-filter",
1639 specific_path_dependent_filter);
1640 g_test_add_func ("/FilterModel/specific/append-after-collapse",
1641 specific_append_after_collapse);
1642 g_test_add_func ("/FilterModel/specific/sort-filter-remove-node",
1643 specific_sort_filter_remove_node);
1644 g_test_add_func ("/FilterModel/specific/sort-filter-remove-root",
1645 specific_sort_filter_remove_root);
1646 g_test_add_func ("/FilterModel/specific/filter-add-child",
1647 specific_filter_add_child);
1649 g_test_add_func ("/FilterModel/specific/bug-300089",
1650 specific_bug_300089);
1651 g_test_add_func ("/FilterModel/specific/bug-301558",
1652 specific_bug_301558);
1653 g_test_add_func ("/FilterModel/specific/bug-311955",
1654 specific_bug_311955);
1655 g_test_add_func ("/FilterModel/specific/bug-346800",
1656 specific_bug_346800);
1657 g_test_add_func ("/FilterModel/specific/bug-364946",
1658 specific_bug_364946);
1659 g_test_add_func ("/FilterModel/specific/bug-464173",
1660 specific_bug_464173);
1661 g_test_add_func ("/FilterModel/specific/bug-540201",
1662 specific_bug_540201);
1663 g_test_add_func ("/FilterModel/specific/bug-549287",
1664 specific_bug_549287);
1666 return g_test_run ();