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 /* From here we are filtered, "2" in the real model is "0" in the filter
751 set_path_visibility (fixture, "2", TRUE);
752 check_level_length (fixture->filter, NULL, 1);
753 check_level_length (fixture->filter, "0", 1);
757 unfiltered_show_single_multi_level (FilterTest *fixture,
758 gconstpointer user_data)
761 set_path_visibility (fixture, "2:2:2", TRUE);
762 set_path_visibility (fixture, "2:2", TRUE);
764 check_level_length (fixture->filter, NULL, LEVEL_LENGTH);
765 check_level_length (fixture->filter, "2", LEVEL_LENGTH);
766 check_level_length (fixture->filter, "2:2", LEVEL_LENGTH);
768 filter_test_enable_filter (fixture);
770 check_filter_model (fixture);
771 check_level_length (fixture->filter, NULL, 0);
773 /* From here we are filtered, "2" in the real model is "0" in the filter
776 set_path_visibility (fixture, "2", TRUE);
777 check_filter_model (fixture);
778 check_level_length (fixture->filter, NULL, 1);
779 check_level_length (fixture->filter, "0", 1);
780 check_level_length (fixture->filter, "0:0", 1);
785 specific_path_dependent_filter_func (GtkTreeModel *model,
791 path = gtk_tree_model_get_path (model, iter);
792 if (gtk_tree_path_get_indices (path)[0] < 4)
799 specific_path_dependent_filter (void)
805 GtkTreeModel *filter;
807 list = gtk_list_store_new (1, G_TYPE_INT);
808 gtk_list_store_insert_with_values (list, &iter, 0, 0, 1, -1);
809 gtk_list_store_insert_with_values (list, &iter, 1, 0, 2, -1);
810 gtk_list_store_insert_with_values (list, &iter, 2, 0, 3, -1);
811 gtk_list_store_insert_with_values (list, &iter, 3, 0, 4, -1);
812 gtk_list_store_insert_with_values (list, &iter, 4, 0, 5, -1);
813 gtk_list_store_insert_with_values (list, &iter, 5, 0, 6, -1);
814 gtk_list_store_insert_with_values (list, &iter, 6, 0, 7, -1);
815 gtk_list_store_insert_with_values (list, &iter, 7, 0, 8, -1);
817 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (list));
818 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (sort), NULL);
819 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
820 specific_path_dependent_filter_func,
823 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort), 0,
824 GTK_SORT_DESCENDING);
826 for (i = 0; i < 4; i++)
828 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
830 gtk_list_store_remove (list, &iter);
832 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (list), &iter,
834 gtk_list_store_remove (list, &iter);
840 specific_append_after_collapse_visible_func (GtkTreeModel *model,
845 gboolean hide_negative_numbers;
847 gtk_tree_model_get (model, iter, 1, &number, -1);
848 hide_negative_numbers = GPOINTER_TO_INT (g_object_get_data (data, "private-hide-negative-numbers"));
850 return (number >= 0 || !hide_negative_numbers);
854 specific_append_after_collapse (void)
856 /* This test is based on one of the test cases I found in my
857 * old test cases directory. I unfortunately do not have a record
858 * from who this test case originated. -Kris.
862 * - Show tree, expand, collapse.
867 GtkTreeIter child_iter;
868 GtkTreeIter child_iter2;
869 GtkTreePath *append_path;
871 GtkTreeModel *filter;
875 GtkWidget *tree_view;
877 store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_INT);
879 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
880 g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
881 GINT_TO_POINTER (FALSE));
882 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
883 specific_append_after_collapse_visible_func,
886 sort = gtk_tree_model_sort_new_with_model (filter);
888 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
889 tree_view = gtk_tree_view_new_with_model (sort);
890 gtk_container_add (GTK_CONTAINER (window), tree_view);
891 gtk_widget_realize (tree_view);
893 while (gtk_events_pending ())
894 gtk_main_iteration ();
896 gtk_tree_store_prepend (store, &iter, NULL);
897 gtk_tree_store_set (store, &iter,
898 0, "hallo", 1, 1, -1);
900 gtk_tree_store_append (store, &child_iter, &iter);
901 gtk_tree_store_set (store, &child_iter,
902 0, "toemaar", 1, 1, -1);
904 gtk_tree_store_append (store, &child_iter2, &child_iter);
905 gtk_tree_store_set (store, &child_iter2,
906 0, "very deep", 1, 1, -1);
908 append_path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &child_iter2);
910 gtk_tree_store_append (store, &child_iter, &iter);
911 gtk_tree_store_set (store, &child_iter,
914 gtk_tree_store_append (store, &child_iter, &iter);
915 gtk_tree_store_set (store, &child_iter,
916 0, "some word", 1, -1, -1);
918 /* Expand and collapse the tree */
919 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
920 while (gtk_events_pending ())
921 gtk_main_iteration ();
923 gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
924 while (gtk_events_pending ())
925 gtk_main_iteration ();
928 g_object_set_data (G_OBJECT (filter), "private-hide-negative-numbers",
929 GINT_TO_POINTER (TRUE));
931 if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, append_path))
933 gtk_tree_store_append (store, &child_iter, &iter);
934 gtk_tree_store_set (store, &child_iter,
935 0, "new new new !!", 1, 1, -1);
937 gtk_tree_path_free (append_path);
940 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
941 while (gtk_events_pending ())
942 gtk_main_iteration ();
947 specific_sort_filter_remove_node_compare_func (GtkTreeModel *model,
956 specific_sort_filter_remove_node_visible_func (GtkTreeModel *model,
962 /* Do reference the model */
963 gtk_tree_model_get (model, iter, 0, &item, -1);
970 specific_sort_filter_remove_node (void)
972 /* This test is based on one of the test cases I found in my
973 * old test cases directory. I unfortunately do not have a record
974 * from who this test case originated. -Kris.
977 * - Create tree store, sort, filter models. The sort model has
978 * a default sort func that is enabled, filter model a visible func
979 * that defaults to returning FALSE.
980 * - Remove a node from the tree store.
985 GtkTreeModel *filter;
989 GtkWidget *tree_view;
991 store = gtk_tree_store_new (1, G_TYPE_STRING);
992 gtk_tree_store_append (store, &iter, NULL);
993 gtk_tree_store_set (store, &iter, 0, "Hello1", -1);
995 gtk_tree_store_append (store, &iter, NULL);
996 gtk_tree_store_set (store, &iter, 0, "Hello2", -1);
998 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
999 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
1000 specific_sort_filter_remove_node_compare_func, NULL, NULL);
1002 filter = gtk_tree_model_filter_new (sort, NULL);
1003 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
1004 specific_sort_filter_remove_node_visible_func,
1008 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1009 tree_view = gtk_tree_view_new_with_model (filter);
1010 gtk_container_add (GTK_CONTAINER (window), tree_view);
1011 gtk_widget_realize (tree_view);
1013 while (gtk_events_pending ())
1014 gtk_main_iteration ();
1017 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
1018 gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
1019 gtk_tree_store_remove (store, &iter);
1021 while (gtk_events_pending ())
1022 gtk_main_iteration ();
1027 specific_sort_filter_remove_root (void)
1029 /* This test is based on one of the test cases I found in my
1030 * old test cases directory. I unfortunately do not have a record
1031 * from who this test case originated. -Kris.
1034 GtkTreeModel *model, *sort, *filter;
1035 GtkTreeIter root, mid, leaf;
1038 model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_INT));
1039 gtk_tree_store_append (GTK_TREE_STORE (model), &root, NULL);
1040 gtk_tree_store_append (GTK_TREE_STORE (model), &mid, &root);
1041 gtk_tree_store_append (GTK_TREE_STORE (model), &leaf, &mid);
1043 path = gtk_tree_model_get_path (model, &mid);
1045 sort = gtk_tree_model_sort_new_with_model (model);
1046 filter = gtk_tree_model_filter_new (sort, path);
1048 gtk_tree_store_remove (GTK_TREE_STORE (model), &root);
1050 g_object_unref (filter);
1051 g_object_unref (sort);
1052 g_object_unref (model);
1057 specific_filter_add_child (void)
1059 /* This test is based on one of the test cases I found in my
1060 * old test cases directory. I unfortunately do not have a record
1061 * from who this test case originated. -Kris.
1065 GtkTreeIter iter_first;
1067 GtkTreeStore *store;
1068 GtkTreeModel *filter;
1070 store = gtk_tree_store_new (1, G_TYPE_STRING);
1072 gtk_tree_store_append (store, &iter_first, NULL);
1073 gtk_tree_store_set (store, &iter_first, 0, "Hello", -1);
1075 gtk_tree_store_append (store, &iter, NULL);
1076 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1078 gtk_tree_store_append (store, &iter, NULL);
1079 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1081 gtk_tree_store_append (store, &iter, NULL);
1082 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1084 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1086 gtk_tree_store_set (store, &iter, 0, "Hello", -1);
1087 gtk_tree_store_append (store, &child, &iter_first);
1088 gtk_tree_store_set (store, &child, 0, "Hello", -1);
1093 specific_bug_300089 (void)
1095 /* Test case for GNOME Bugzilla bug 300089. Written by
1098 GtkTreeModel *sort_model, *child_model;
1100 GtkTreeIter iter, iter2, sort_iter;
1102 child_model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_STRING));
1104 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1105 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -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, "B", -1);
1109 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1110 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "D", -1);
1111 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1112 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "E", -1);
1114 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1115 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "C", -1);
1118 sort_model = GTK_TREE_MODEL (gtk_tree_model_sort_new_with_model (child_model));
1119 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
1120 0, GTK_SORT_ASCENDING);
1122 path = gtk_tree_path_new_from_indices (1, 1, -1);
1124 /* make sure a level is constructed */
1125 gtk_tree_model_get_iter (sort_model, &sort_iter, path);
1127 /* change the "E" row in a way that causes it to change position */
1128 gtk_tree_model_get_iter (child_model, &iter, path);
1129 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1134 specific_bug_301558_sort_func (GtkTreeModel *model,
1141 gtk_tree_model_get (model, a, 0, &i, -1);
1142 gtk_tree_model_get (model, b, 0, &j, -1);
1148 specific_bug_301558 (void)
1150 /* Test case for GNOME Bugzilla bug 301558 provided by
1154 GtkTreeModel *filter;
1156 GtkTreeIter root, iter, iter2;
1161 tree = gtk_tree_store_new (2, G_TYPE_INT, G_TYPE_BOOLEAN);
1162 gtk_tree_store_append (tree, &iter, NULL);
1163 gtk_tree_store_set (tree, &iter, 0, 123, 1, TRUE, -1);
1164 gtk_tree_store_append (tree, &iter2, &iter);
1165 gtk_tree_store_set (tree, &iter2, 0, 73, 1, TRUE, -1);
1167 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (tree));
1168 gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sort),
1169 specific_bug_301558_sort_func,
1172 filter = gtk_tree_model_filter_new (sort, NULL);
1173 gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter), 1);
1175 view = gtk_tree_view_new_with_model (filter);
1177 while (gtk_events_pending ())
1178 gtk_main_iteration ();
1182 for (i = 0; i < 10; i++)
1184 if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (tree), &root))
1185 g_assert_not_reached ();
1189 gtk_tree_store_append (tree, &iter, &root);
1190 gtk_tree_store_set (tree, &iter, 0, 456, 1, TRUE, -1);
1195 n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (tree), &root);
1196 gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (tree), &iter,
1198 gtk_tree_store_remove (tree, &iter);
1207 specific_bug_311955_filter_func (GtkTreeModel *model,
1213 gtk_tree_model_get (model, iter, 0, &value, -1);
1215 return (value != 0);
1219 specific_bug_311955 (void)
1221 /* This is a test case for GNOME Bugzilla bug 311955. It was written
1224 GtkTreeIter iter, child, root;
1225 GtkTreeStore *store;
1227 GtkTreeModel *filter;
1230 GtkWidget *tree_view;
1234 store = gtk_tree_store_new (1, G_TYPE_INT);
1236 gtk_tree_store_append (store, &root, NULL);
1237 gtk_tree_store_set (store, &root, 0, 33, -1);
1239 gtk_tree_store_append (store, &iter, &root);
1240 gtk_tree_store_set (store, &iter, 0, 50, -1);
1242 gtk_tree_store_append (store, &iter, NULL);
1243 gtk_tree_store_set (store, &iter, 0, 22, -1);
1245 sort = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1246 filter = gtk_tree_model_filter_new (sort, NULL);
1248 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
1249 specific_bug_311955_filter_func,
1252 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1253 tree_view = gtk_tree_view_new_with_model (filter);
1254 g_object_unref (store);
1256 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
1258 while (gtk_events_pending ())
1259 gtk_main_iteration ();
1262 for (i = 0; i < 4; i++)
1264 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
1266 gtk_tree_store_append (store, &iter, &root);
1269 gtk_tree_store_set (store, &iter, 0, i, -1);
1273 gtk_tree_store_append (store, &child, &iter);
1274 gtk_tree_store_set (store, &child, 0, 10, -1);
1278 while (gtk_events_pending ())
1279 gtk_main_iteration ();
1281 /* Remove bottommost child from the tree. */
1282 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &root);
1283 n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), &root);
1285 if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, &root, n - 2))
1287 if (gtk_tree_model_iter_children (GTK_TREE_MODEL (store), &child, &iter))
1288 gtk_tree_store_remove (store, &child);
1291 g_assert_not_reached ();
1295 specific_bug_346800 (void)
1297 /* This is a test case for GNOME Bugzilla bug 346800. It was written
1298 * by Jonathan Matthew.
1301 GtkTreeIter node_iters[50];
1302 GtkTreeIter child_iters[50];
1303 GtkTreeModel *model;
1304 GtkTreeModelFilter *filter;
1305 GtkTreeStore *store;
1309 columns = g_new (GType, 2);
1310 columns[0] = G_TYPE_STRING;
1311 columns[1] = G_TYPE_BOOLEAN;
1312 store = gtk_tree_store_newv (2, columns);
1313 model = GTK_TREE_MODEL (store);
1315 filter = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (model, NULL));
1316 gtk_tree_model_filter_set_visible_column (filter, 1);
1318 for (i=0; i<items; i++)
1320 /* allocate random amounts of junk, otherwise the filter model's arrays can expand without moving */
1323 gtk_tree_store_append (store, &node_iters[i], NULL);
1324 gtk_tree_store_set (store, &node_iters[i],
1326 1, ((i%6) == 0) ? FALSE : TRUE,
1330 gtk_tree_store_append (store, &child_iters[i], &node_iters[i]);
1331 gtk_tree_store_set (store, &child_iters[i],
1332 0, "something else",
1335 gtk_tree_model_filter_refilter (filter);
1339 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-1], 1,
1340 (i & 1) ? TRUE : FALSE, -1);
1341 gtk_tree_model_filter_refilter (filter);
1343 gtk_tree_store_set (GTK_TREE_STORE (model), &child_iters[i-2], 1,
1344 (i & 1) ? FALSE: TRUE, -1);
1345 gtk_tree_model_filter_refilter (filter);
1352 specific_bug_364946 (void)
1354 /* This is a test case for GNOME Bugzilla bug 364946. It was written
1355 * by Andreas Koehler.
1357 GtkTreeStore *store;
1358 GtkTreeIter a, aa, aaa, aab, iter;
1359 GtkTreeModel *s_model;
1361 store = gtk_tree_store_new (1, G_TYPE_STRING);
1363 gtk_tree_store_append (store, &a, NULL);
1364 gtk_tree_store_set (store, &a, 0, "0", -1);
1366 gtk_tree_store_append (store, &aa, &a);
1367 gtk_tree_store_set (store, &aa, 0, "0:0", -1);
1369 gtk_tree_store_append (store, &aaa, &aa);
1370 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1372 gtk_tree_store_append (store, &aab, &aa);
1373 gtk_tree_store_set (store, &aab, 0, "0:0:1", -1);
1375 s_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1376 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (s_model), 0,
1377 GTK_SORT_ASCENDING);
1379 gtk_tree_model_get_iter_from_string (s_model, &iter, "0:0:0");
1381 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1382 gtk_tree_store_remove (store, &aaa);
1383 gtk_tree_store_remove (store, &aab);
1385 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (s_model));
1390 specific_bug_464173_visible_func (GtkTreeModel *model,
1394 gboolean *visible = (gboolean *)data;
1400 specific_bug_464173 (void)
1402 /* Test case for GNOME Bugzilla bug 464173, test case written
1403 * by Andreas Koehler.
1405 GtkTreeStore *model;
1406 GtkTreeModelFilter *f_model;
1407 GtkTreeIter iter1, iter2;
1409 gboolean visible = TRUE;
1411 model = gtk_tree_store_new (1, G_TYPE_STRING);
1412 gtk_tree_store_append (model, &iter1, NULL);
1413 gtk_tree_store_set (model, &iter1, 0, "Foo", -1);
1414 gtk_tree_store_append (model, &iter2, &iter1);
1415 gtk_tree_store_set (model, &iter2, 0, "Bar", -1);
1417 f_model = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL(model), NULL));
1418 gtk_tree_model_filter_set_visible_func (f_model,
1419 specific_bug_464173_visible_func,
1422 view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (f_model));
1425 gtk_tree_model_filter_refilter (f_model);
1430 specific_bug_540201_filter_func (GtkTreeModel *model,
1434 gboolean has_children;
1436 has_children = gtk_tree_model_iter_has_child (model, iter);
1438 return has_children;
1442 specific_bug_540201 (void)
1444 /* Test case for GNOME Bugzilla bug 540201, steps provided by
1447 GtkTreeIter iter, root;
1448 GtkTreeStore *store;
1449 GtkTreeModel *filter;
1451 GtkWidget *tree_view;
1453 store = gtk_tree_store_new (1, G_TYPE_INT);
1455 gtk_tree_store_append (store, &root, NULL);
1456 gtk_tree_store_set (store, &root, 0, 33, -1);
1458 filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1459 tree_view = gtk_tree_view_new_with_model (filter);
1461 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter),
1462 specific_bug_540201_filter_func,
1465 gtk_tree_store_append (store, &iter, &root);
1466 gtk_tree_store_set (store, &iter, 0, 50, -1);
1468 gtk_tree_store_append (store, &iter, &root);
1469 gtk_tree_store_set (store, &iter, 0, 22, -1);
1472 gtk_tree_store_append (store, &root, NULL);
1473 gtk_tree_store_set (store, &root, 0, 33, -1);
1475 gtk_tree_store_append (store, &iter, &root);
1476 gtk_tree_store_set (store, &iter, 0, 22, -1);
1481 specific_bug_549287_visible_func (GtkTreeModel *model,
1485 gboolean result = FALSE;
1487 result = gtk_tree_model_iter_has_child (model, iter);
1493 specific_bug_549287 (void)
1495 /* Test case for GNOME Bugzilla bug 529287, provided by Julient Puydt */
1498 GtkTreeStore *store;
1499 GtkTreeModel *filtered;
1502 GtkTreeIter *swap, *parent, *child;
1504 store = gtk_tree_store_new (1, G_TYPE_STRING);
1505 filtered = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
1506 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filtered),
1507 specific_bug_549287_visible_func,
1510 view = gtk_tree_view_new_with_model (filtered);
1512 for (i = 0; i < 4; i++)
1514 if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
1516 parent = gtk_tree_iter_copy (&iter);
1517 child = gtk_tree_iter_copy (&iter);
1519 while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store),
1528 gtk_tree_store_append (store, child, parent);
1529 gtk_tree_store_set (store, child,
1533 gtk_tree_iter_free (parent);
1534 gtk_tree_iter_free (child);
1538 gtk_tree_store_append (store, &iter, NULL);
1539 gtk_tree_store_set (store, &iter,
1544 /* since we inserted something, we changed the visibility conditions: */
1545 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filtered));
1555 gtk_test_init (&argc, &argv, NULL);
1557 g_test_add ("/FilterModel/self/verify-test-suite",
1561 filter_test_teardown);
1563 g_test_add ("/FilterModel/self/verify-test-suite/vroot/depth-1",
1564 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1566 verify_test_suite_vroot,
1567 filter_test_teardown);
1568 g_test_add ("/FilterModel/self/verify-test-suite/vroot/depth-2",
1569 FilterTest, gtk_tree_path_new_from_indices (2, 3, -1),
1571 verify_test_suite_vroot,
1572 filter_test_teardown);
1575 g_test_add ("/FilterModel/filled/hide-root-level",
1578 filled_hide_root_level,
1579 filter_test_teardown);
1580 g_test_add ("/FilterModel/filled/hide-child-levels",
1583 filled_hide_child_levels,
1584 filter_test_teardown);
1586 g_test_add ("/FilterModel/filled/hide-root-level/vroot",
1587 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1589 filled_vroot_hide_root_level,
1590 filter_test_teardown);
1591 g_test_add ("/FilterModel/filled/hide-child-levels/vroot",
1592 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1594 filled_vroot_hide_child_levels,
1595 filter_test_teardown);
1598 g_test_add ("/FilterModel/empty/show-nodes",
1600 filter_test_setup_empty,
1602 filter_test_teardown);
1604 g_test_add ("/FilterModel/empty/show-nodes/vroot",
1605 FilterTest, gtk_tree_path_new_from_indices (2, -1),
1606 filter_test_setup_empty,
1607 empty_vroot_show_nodes,
1608 filter_test_teardown);
1611 g_test_add ("/FilterModel/unfiltered/hide-single",
1613 filter_test_setup_unfiltered,
1614 unfiltered_hide_single,
1615 filter_test_teardown);
1616 g_test_add ("/FilterModel/unfiltered/hide-single-child",
1618 filter_test_setup_unfiltered,
1619 unfiltered_hide_single_child,
1620 filter_test_teardown);
1621 g_test_add ("/FilterModel/unfiltered/hide-single-multi-level",
1623 filter_test_setup_unfiltered,
1624 unfiltered_hide_single_multi_level,
1625 filter_test_teardown);
1627 g_test_add ("/FilterModel/unfiltered/show-single",
1629 filter_test_setup_empty_unfiltered,
1630 unfiltered_show_single,
1631 filter_test_teardown);
1632 g_test_add ("/FilterModel/unfiltered/show-single-child",
1634 filter_test_setup_empty_unfiltered,
1635 unfiltered_show_single_child,
1636 filter_test_teardown);
1637 g_test_add ("/FilterModel/unfiltered/show-single-multi-level",
1639 filter_test_setup_empty_unfiltered,
1640 unfiltered_show_single_multi_level,
1641 filter_test_teardown);
1644 g_test_add_func ("/FilterModel/specific/path-dependent-filter",
1645 specific_path_dependent_filter);
1646 g_test_add_func ("/FilterModel/specific/append-after-collapse",
1647 specific_append_after_collapse);
1648 g_test_add_func ("/FilterModel/specific/sort-filter-remove-node",
1649 specific_sort_filter_remove_node);
1650 g_test_add_func ("/FilterModel/specific/sort-filter-remove-root",
1651 specific_sort_filter_remove_root);
1652 g_test_add_func ("/FilterModel/specific/filter-add-child",
1653 specific_filter_add_child);
1655 g_test_add_func ("/FilterModel/specific/bug-300089",
1656 specific_bug_300089);
1657 g_test_add_func ("/FilterModel/specific/bug-301558",
1658 specific_bug_301558);
1659 g_test_add_func ("/FilterModel/specific/bug-311955",
1660 specific_bug_311955);
1661 g_test_add_func ("/FilterModel/specific/bug-346800",
1662 specific_bug_346800);
1663 g_test_add_func ("/FilterModel/specific/bug-364946",
1664 specific_bug_364946);
1665 g_test_add_func ("/FilterModel/specific/bug-464173",
1666 specific_bug_464173);
1667 g_test_add_func ("/FilterModel/specific/bug-540201",
1668 specific_bug_540201);
1669 g_test_add_func ("/FilterModel/specific/bug-549287",
1670 specific_bug_549287);
1672 return g_test_run ();