1 /* Extensive GtkTreeModelSort tests.
2 * Copyright (C) 2009,2011 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.
22 #include "treemodel.h"
23 #include "gtktreemodelrefcount.h"
27 ref_count_single_level (void)
31 GtkTreeModelRefCount *ref_model;
32 GtkTreeModel *sort_model;
35 model = gtk_tree_model_ref_count_new ();
36 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
38 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
39 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
40 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
41 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
42 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
44 assert_root_level_unreferenced (ref_model);
46 sort_model = gtk_tree_model_sort_new_with_model (model);
47 tree_view = gtk_tree_view_new_with_model (sort_model);
49 assert_entire_model_referenced (ref_model, 1);
51 gtk_widget_destroy (tree_view);
53 assert_entire_model_unreferenced (ref_model);
55 g_object_unref (sort_model);
56 g_object_unref (ref_model);
60 ref_count_two_levels (void)
62 GtkTreeIter parent1, parent2, iter;
64 GtkTreeModelRefCount *ref_model;
65 GtkTreeModel *sort_model;
68 model = gtk_tree_model_ref_count_new ();
69 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
71 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, NULL);
72 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, NULL);
73 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
74 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
75 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
77 assert_entire_model_unreferenced (ref_model);
79 sort_model = gtk_tree_model_sort_new_with_model (model);
80 tree_view = gtk_tree_view_new_with_model (sort_model);
82 assert_root_level_referenced (ref_model, 1);
83 assert_node_ref_count (ref_model, &iter, 0);
85 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
87 assert_node_ref_count (ref_model, &parent1, 1);
88 assert_node_ref_count (ref_model, &parent2, 2);
89 assert_node_ref_count (ref_model, &iter, 1);
91 gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
93 assert_node_ref_count (ref_model, &parent1, 1);
94 assert_node_ref_count (ref_model, &parent2, 2);
95 assert_node_ref_count (ref_model, &iter, 0);
97 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
99 assert_root_level_referenced (ref_model, 1);
100 assert_node_ref_count (ref_model, &iter, 0);
102 gtk_widget_destroy (tree_view);
104 assert_entire_model_unreferenced (ref_model);
106 g_object_unref (sort_model);
107 g_object_unref (ref_model);
111 ref_count_three_levels (void)
113 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
114 GtkTreeIter iter_parent1, iter_parent2;
116 GtkTreeModelRefCount *ref_model;
117 GtkTreeModel *sort_model;
119 GtkWidget *tree_view;
121 model = gtk_tree_model_ref_count_new ();
122 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
133 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
134 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
135 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
136 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
137 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
138 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
139 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
141 assert_entire_model_unreferenced (ref_model);
143 sort_model = gtk_tree_model_sort_new_with_model (model);
144 tree_view = gtk_tree_view_new_with_model (sort_model);
146 assert_root_level_referenced (ref_model, 1);
147 assert_node_ref_count (ref_model, &parent1, 0);
148 assert_node_ref_count (ref_model, &parent2, 0);
149 assert_level_unreferenced (ref_model, &parent1);
150 assert_level_unreferenced (ref_model, &parent2);
152 path = gtk_tree_path_new_from_indices (1, -1);
153 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
155 assert_node_ref_count (ref_model, &grandparent1, 1);
156 assert_node_ref_count (ref_model, &grandparent2, 2);
157 assert_node_ref_count (ref_model, &parent1, 1);
158 assert_node_ref_count (ref_model, &parent2, 1);
159 assert_node_ref_count (ref_model, &iter_parent1, 0);
160 assert_node_ref_count (ref_model, &iter_parent2, 0);
162 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
164 assert_node_ref_count (ref_model, &grandparent1, 1);
165 assert_node_ref_count (ref_model, &grandparent2, 2);
166 assert_node_ref_count (ref_model, &parent1, 2);
167 assert_node_ref_count (ref_model, &parent2, 2);
168 assert_node_ref_count (ref_model, &iter_parent1, 1);
169 assert_node_ref_count (ref_model, &iter_parent2, 1);
171 gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
173 assert_node_ref_count (ref_model, &grandparent1, 1);
174 assert_node_ref_count (ref_model, &grandparent2, 2);
175 assert_node_ref_count (ref_model, &parent1, 1);
176 assert_node_ref_count (ref_model, &parent2, 1);
177 assert_node_ref_count (ref_model, &iter_parent1, 0);
178 assert_node_ref_count (ref_model, &iter_parent2, 0);
180 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
182 assert_root_level_referenced (ref_model, 1);
183 assert_node_ref_count (ref_model, &parent1, 0);
184 assert_node_ref_count (ref_model, &parent2, 0);
186 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
188 assert_node_ref_count (ref_model, &grandparent1, 1);
189 assert_node_ref_count (ref_model, &grandparent2, 2);
190 assert_node_ref_count (ref_model, &parent1, 1);
191 assert_node_ref_count (ref_model, &parent2, 1);
192 assert_node_ref_count (ref_model, &iter_parent1, 0);
193 assert_node_ref_count (ref_model, &iter_parent2, 0);
195 gtk_tree_path_append_index (path, 1);
196 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
198 assert_node_ref_count (ref_model, &grandparent1, 1);
199 assert_node_ref_count (ref_model, &grandparent2, 2);
200 assert_node_ref_count (ref_model, &parent1, 1);
201 assert_node_ref_count (ref_model, &parent2, 2);
202 assert_node_ref_count (ref_model, &iter_parent1, 0);
203 assert_node_ref_count (ref_model, &iter_parent2, 1);
205 gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
207 assert_node_ref_count (ref_model, &grandparent1, 1);
208 assert_node_ref_count (ref_model, &grandparent2, 2);
209 assert_node_ref_count (ref_model, &parent1, 1);
210 assert_node_ref_count (ref_model, &parent2, 2);
211 assert_node_ref_count (ref_model, &iter_parent1, 0);
212 assert_node_ref_count (ref_model, &iter_parent2, 0);
214 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
216 assert_node_ref_count (ref_model, &grandparent1, 1);
217 assert_node_ref_count (ref_model, &grandparent2, 2);
218 assert_node_ref_count (ref_model, &parent1, 1);
219 assert_node_ref_count (ref_model, &parent2, 1);
220 assert_node_ref_count (ref_model, &iter_parent1, 0);
221 assert_node_ref_count (ref_model, &iter_parent2, 0);
223 gtk_tree_path_up (path);
224 gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
225 gtk_tree_path_free (path);
227 assert_node_ref_count (ref_model, &grandparent1, 1);
228 assert_node_ref_count (ref_model, &grandparent2, 2);
229 assert_node_ref_count (ref_model, &parent1, 0);
230 assert_node_ref_count (ref_model, &parent2, 0);
231 assert_node_ref_count (ref_model, &iter_parent1, 0);
232 assert_node_ref_count (ref_model, &iter_parent2, 0);
234 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
236 assert_node_ref_count (ref_model, &grandparent1, 1);
237 assert_node_ref_count (ref_model, &grandparent2, 1);
238 assert_node_ref_count (ref_model, &parent1, 0);
239 assert_node_ref_count (ref_model, &parent2, 0);
240 assert_node_ref_count (ref_model, &iter_parent1, 0);
241 assert_node_ref_count (ref_model, &iter_parent2, 0);
243 gtk_widget_destroy (tree_view);
245 assert_entire_model_unreferenced (ref_model);
247 g_object_unref (sort_model);
248 g_object_unref (ref_model);
252 ref_count_delete_row (void)
254 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
255 GtkTreeIter iter_parent1, iter_parent2;
257 GtkTreeModelRefCount *ref_model;
258 GtkTreeModel *sort_model;
260 GtkWidget *tree_view;
262 model = gtk_tree_model_ref_count_new ();
263 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
274 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
275 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
276 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
277 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
278 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
279 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
280 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
282 assert_entire_model_unreferenced (ref_model);
284 sort_model = gtk_tree_model_sort_new_with_model (model);
285 tree_view = gtk_tree_view_new_with_model (sort_model);
287 assert_root_level_referenced (ref_model, 1);
288 assert_node_ref_count (ref_model, &parent1, 0);
289 assert_node_ref_count (ref_model, &parent2, 0);
290 assert_level_unreferenced (ref_model, &parent1);
291 assert_level_unreferenced (ref_model, &parent2);
293 path = gtk_tree_path_new_from_indices (1, -1);
294 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
295 gtk_tree_path_free (path);
297 assert_node_ref_count (ref_model, &grandparent1, 1);
298 assert_node_ref_count (ref_model, &grandparent2, 2);
299 assert_node_ref_count (ref_model, &parent1, 2);
300 assert_node_ref_count (ref_model, &parent2, 2);
301 assert_node_ref_count (ref_model, &iter_parent1, 1);
302 assert_node_ref_count (ref_model, &iter_parent2, 1);
304 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter_parent2);
306 assert_node_ref_count (ref_model, &grandparent1, 1);
307 assert_node_ref_count (ref_model, &grandparent2, 2);
308 assert_node_ref_count (ref_model, &parent1, 2);
309 assert_level_referenced (ref_model, 1, &parent1);
310 assert_node_ref_count (ref_model, &parent2, 2);
311 assert_level_referenced (ref_model, 1, &parent2);
313 gtk_tree_store_remove (GTK_TREE_STORE (model), &parent1);
315 assert_node_ref_count (ref_model, &grandparent1, 1);
316 assert_node_ref_count (ref_model, &grandparent2, 2);
317 assert_node_ref_count (ref_model, &parent2, 2);
318 assert_level_referenced (ref_model, 1, &parent2);
320 gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
322 assert_node_ref_count (ref_model, &grandparent1, 1);
324 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
326 assert_node_ref_count (ref_model, &grandparent1, 1);
328 gtk_widget_destroy (tree_view);
330 assert_entire_model_unreferenced (ref_model);
332 g_object_unref (sort_model);
333 g_object_unref (ref_model);
337 ref_count_cleanup (void)
339 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
340 GtkTreeIter iter_parent1, iter_parent2;
342 GtkTreeModelRefCount *ref_model;
343 GtkTreeModel *sort_model;
344 GtkWidget *tree_view;
346 model = gtk_tree_model_ref_count_new ();
347 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
358 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
359 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
360 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
361 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
362 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
363 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
364 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
366 sort_model = gtk_tree_model_sort_new_with_model (model);
367 tree_view = gtk_tree_view_new_with_model (sort_model);
369 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
371 gtk_widget_destroy (tree_view);
373 assert_node_ref_count (ref_model, &grandparent1, 0);
374 assert_node_ref_count (ref_model, &grandparent2, 1);
375 assert_node_ref_count (ref_model, &parent1, 1);
376 assert_node_ref_count (ref_model, &parent2, 1);
377 assert_node_ref_count (ref_model, &iter_parent1, 0);
378 assert_node_ref_count (ref_model, &iter_parent2, 0);
380 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
382 assert_entire_model_unreferenced (ref_model);
384 g_object_unref (sort_model);
385 g_object_unref (ref_model);
389 ref_count_row_ref (void)
391 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
392 GtkTreeIter iter_parent1, iter_parent2;
394 GtkTreeModelRefCount *ref_model;
395 GtkTreeModel *sort_model;
396 GtkWidget *tree_view;
398 GtkTreeRowReference *row_ref;
400 model = gtk_tree_model_ref_count_new ();
401 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
412 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
413 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
414 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
415 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
416 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
417 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
418 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
420 sort_model = gtk_tree_model_sort_new_with_model (model);
421 tree_view = gtk_tree_view_new_with_model (sort_model);
423 path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
424 row_ref = gtk_tree_row_reference_new (sort_model, path);
425 gtk_tree_path_free (path);
427 assert_node_ref_count (ref_model, &grandparent1, 1);
428 /* Referenced because the node is visible, its child level is built
429 * and referenced by the row ref.
431 assert_node_ref_count (ref_model, &grandparent2, 3);
432 assert_node_ref_count (ref_model, &parent1, 0);
433 /* Referenced by the row ref and because its child level is built. */
434 assert_node_ref_count (ref_model, &parent2, 2);
435 assert_node_ref_count (ref_model, &iter_parent1, 0);
436 assert_node_ref_count (ref_model, &iter_parent2, 1);
438 gtk_tree_row_reference_free (row_ref);
440 assert_node_ref_count (ref_model, &grandparent1, 1);
441 assert_node_ref_count (ref_model, &grandparent2, 2);
442 assert_node_ref_count (ref_model, &parent1, 0);
443 assert_node_ref_count (ref_model, &parent2, 1);
444 assert_node_ref_count (ref_model, &iter_parent1, 0);
445 assert_node_ref_count (ref_model, &iter_parent2, 0);
447 path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
448 row_ref = gtk_tree_row_reference_new (sort_model, path);
449 gtk_tree_path_free (path);
451 assert_node_ref_count (ref_model, &grandparent1, 1);
452 /* Referenced because the node is visible, its child level is built
453 * and referenced by the row ref.
455 assert_node_ref_count (ref_model, &grandparent2, 3);
456 assert_node_ref_count (ref_model, &parent1, 0);
457 /* Referenced by the row ref and because its child level is built. */
458 assert_node_ref_count (ref_model, &parent2, 2);
459 assert_node_ref_count (ref_model, &iter_parent1, 0);
460 assert_node_ref_count (ref_model, &iter_parent2, 1);
462 gtk_tree_store_remove (GTK_TREE_STORE (model), &parent2);
464 assert_node_ref_count (ref_model, &grandparent1, 1);
465 assert_node_ref_count (ref_model, &grandparent2, 1);
466 assert_node_ref_count (ref_model, &parent1, 0);
467 assert_node_ref_count (ref_model, &iter_parent1, 0);
469 gtk_tree_row_reference_free (row_ref);
471 assert_node_ref_count (ref_model, &grandparent1, 1);
472 assert_node_ref_count (ref_model, &grandparent2, 1);
473 assert_node_ref_count (ref_model, &parent1, 0);
474 assert_node_ref_count (ref_model, &iter_parent1, 0);
476 gtk_widget_destroy (tree_view);
477 g_object_unref (sort_model);
479 assert_entire_model_unreferenced (ref_model);
481 g_object_unref (ref_model);
485 ref_count_reorder_single (void)
487 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
488 GtkTreeIter siter1, siter2, siter3, siter4, siter5;
490 GtkTreeModelRefCount *ref_model;
491 GtkTreeModel *sort_model;
492 GtkWidget *tree_view;
493 GType column_types[] = { G_TYPE_INT };
495 model = gtk_tree_model_ref_count_new ();
496 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
498 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
501 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
503 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
505 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
507 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
509 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
512 assert_root_level_unreferenced (ref_model);
514 sort_model = gtk_tree_model_sort_new_with_model (model);
515 tree_view = gtk_tree_view_new_with_model (sort_model);
517 assert_entire_model_referenced (ref_model, 1);
519 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
520 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
521 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
522 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
523 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
525 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
526 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
528 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
529 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
530 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
532 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter5);
534 assert_node_ref_count (ref_model, &iter1, 3);
535 assert_node_ref_count (ref_model, &iter2, 1);
536 assert_node_ref_count (ref_model, &iter3, 4);
537 assert_node_ref_count (ref_model, &iter4, 1);
538 assert_node_ref_count (ref_model, &iter5, 2);
541 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
542 0, GTK_SORT_ASCENDING);
544 assert_node_ref_count (ref_model, &iter1, 3);
545 assert_node_ref_count (ref_model, &iter2, 1);
546 assert_node_ref_count (ref_model, &iter3, 4);
547 assert_node_ref_count (ref_model, &iter4, 1);
548 assert_node_ref_count (ref_model, &iter5, 2);
550 /* Re-translate the iters after sorting */
551 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
552 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
553 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
554 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
555 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
557 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
558 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
560 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
561 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
562 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
564 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter5);
566 assert_entire_model_referenced (ref_model, 1);
568 gtk_widget_destroy (tree_view);
569 g_object_unref (sort_model);
571 assert_entire_model_unreferenced (ref_model);
573 g_object_unref (ref_model);
577 ref_count_reorder_two (void)
579 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
580 GtkTreeIter citer1, citer2, citer3, citer4, citer5;
581 GtkTreeIter siter1, siter2, siter3, siter4, siter5;
582 GtkTreeIter sciter1, sciter2, sciter3, sciter4, sciter5;
584 GtkTreeModelRefCount *ref_model;
585 GtkTreeModel *sort_model;
586 GtkWidget *tree_view;
587 GType column_types[] = { G_TYPE_INT };
589 model = gtk_tree_model_ref_count_new ();
590 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
592 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
595 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
597 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
599 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
601 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
603 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
607 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer1, &iter1, 0,
609 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer2, &iter1, 1,
611 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer3, &iter1, 2,
613 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer4, &iter1, 3,
615 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer5, &iter1, 4,
618 assert_root_level_unreferenced (ref_model);
620 sort_model = gtk_tree_model_sort_new_with_model (model);
621 tree_view = gtk_tree_view_new_with_model (sort_model);
622 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
624 assert_node_ref_count (ref_model, &iter1, 2);
625 assert_node_ref_count (ref_model, &iter2, 1);
626 assert_node_ref_count (ref_model, &iter3, 1);
627 assert_node_ref_count (ref_model, &iter4, 1);
628 assert_node_ref_count (ref_model, &iter5, 1);
630 assert_level_referenced (ref_model, 1, &iter1);
632 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
633 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
634 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
635 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
636 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
638 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter1, &citer1);
639 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter2, &citer2);
640 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter3, &citer3);
641 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter4, &citer4);
642 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter5, &citer5);
644 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
645 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
647 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
648 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
649 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
651 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter5);
653 assert_node_ref_count (ref_model, &iter1, 4);
654 assert_node_ref_count (ref_model, &iter2, 1);
655 assert_node_ref_count (ref_model, &iter3, 4);
656 assert_node_ref_count (ref_model, &iter4, 1);
657 assert_node_ref_count (ref_model, &iter5, 2);
659 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter3);
660 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter3);
662 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
663 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
664 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
666 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter1);
668 assert_node_ref_count (ref_model, &citer1, 2);
669 assert_node_ref_count (ref_model, &citer2, 1);
670 assert_node_ref_count (ref_model, &citer3, 3);
671 assert_node_ref_count (ref_model, &citer4, 1);
672 assert_node_ref_count (ref_model, &citer5, 4);
675 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
676 0, GTK_SORT_ASCENDING);
678 assert_node_ref_count (ref_model, &iter1, 4);
679 assert_node_ref_count (ref_model, &iter2, 1);
680 assert_node_ref_count (ref_model, &iter3, 4);
681 assert_node_ref_count (ref_model, &iter4, 1);
682 assert_node_ref_count (ref_model, &iter5, 2);
684 assert_node_ref_count (ref_model, &citer1, 2);
685 assert_node_ref_count (ref_model, &citer2, 1);
686 assert_node_ref_count (ref_model, &citer3, 3);
687 assert_node_ref_count (ref_model, &citer4, 1);
688 assert_node_ref_count (ref_model, &citer5, 4);
690 /* Re-translate the iters after sorting */
691 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
692 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
693 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
694 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
695 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
697 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter1, &citer1);
698 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter2, &citer2);
699 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter3, &citer3);
700 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter4, &citer4);
701 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter5, &citer5);
703 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
704 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
706 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
707 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
708 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
710 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter5);
712 assert_node_ref_count (ref_model, &iter1, 2);
713 assert_node_ref_count (ref_model, &iter2, 1);
714 assert_node_ref_count (ref_model, &iter3, 1);
715 assert_node_ref_count (ref_model, &iter4, 1);
716 assert_node_ref_count (ref_model, &iter5, 1);
718 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter3);
719 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter3);
721 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
722 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
723 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
725 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter1);
727 assert_level_referenced (ref_model, 1, &iter1);
729 gtk_widget_destroy (tree_view);
730 g_object_unref (sort_model);
732 assert_entire_model_unreferenced (ref_model);
734 g_object_unref (ref_model);
738 check_sort_order (GtkTreeModel *sort_model,
739 GtkSortType sort_order,
740 const char *parent_path)
746 gtk_tree_model_get_iter_first (sort_model, &siter);
751 path = gtk_tree_path_new_from_string (parent_path);
752 gtk_tree_path_append_index (path, 0);
754 gtk_tree_model_get_iter (sort_model, &siter, path);
756 gtk_tree_path_free (path);
759 if (sort_order == GTK_SORT_ASCENDING)
762 prev_value = INT_MAX;
768 gtk_tree_model_get (sort_model, &siter, 0, &value, -1);
769 if (sort_order == GTK_SORT_ASCENDING)
770 g_assert (prev_value <= value);
772 g_assert (prev_value >= value);
776 while (gtk_tree_model_iter_next (sort_model, &siter));
780 rows_reordered_single_level (void)
782 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
784 GtkTreeModelRefCount *ref_model;
785 GtkTreeModel *sort_model;
786 GtkWidget *tree_view;
787 SignalMonitor *monitor;
789 GType column_types[] = { G_TYPE_INT };
797 model = gtk_tree_model_ref_count_new ();
798 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
800 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
803 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
805 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
807 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
809 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
811 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
814 sort_model = gtk_tree_model_sort_new_with_model (model);
815 tree_view = gtk_tree_view_new_with_model (sort_model);
817 monitor = signal_monitor_new (sort_model);
820 path = gtk_tree_path_new ();
821 signal_monitor_append_signal_reordered (monitor,
824 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
825 0, GTK_SORT_ASCENDING);
826 signal_monitor_assert_is_empty (monitor);
827 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
829 signal_monitor_append_signal_reordered (monitor,
832 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
833 0, GTK_SORT_DESCENDING);
834 signal_monitor_assert_is_empty (monitor);
835 check_sort_order (sort_model, GTK_SORT_DESCENDING, NULL);
837 signal_monitor_append_signal_reordered (monitor,
840 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
841 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
843 signal_monitor_assert_is_empty (monitor);
845 gtk_tree_path_free (path);
846 signal_monitor_free (monitor);
848 gtk_widget_destroy (tree_view);
849 g_object_unref (sort_model);
851 assert_entire_model_unreferenced (ref_model);
853 g_object_unref (ref_model);
857 rows_reordered_two_levels (void)
859 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
860 GtkTreeIter citer1, citer2, citer3, citer4, citer5;
862 GtkTreeModelRefCount *ref_model;
863 GtkTreeModel *sort_model;
864 GtkWidget *tree_view;
865 SignalMonitor *monitor;
866 GtkTreePath *path, *child_path;
867 GType column_types[] = { G_TYPE_INT };
875 model = gtk_tree_model_ref_count_new ();
876 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
878 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
881 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
883 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
885 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
887 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
889 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
893 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer1, &iter1, 0,
895 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer2, &iter1, 1,
897 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer3, &iter1, 2,
899 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer4, &iter1, 3,
901 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer5, &iter1, 4,
904 sort_model = gtk_tree_model_sort_new_with_model (model);
905 tree_view = gtk_tree_view_new_with_model (sort_model);
906 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
908 monitor = signal_monitor_new (sort_model);
911 path = gtk_tree_path_new ();
912 child_path = gtk_tree_path_new_from_indices (2, -1);
913 signal_monitor_append_signal_reordered (monitor,
916 signal_monitor_append_signal_reordered (monitor,
918 child_path, order[0], 5);
919 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
920 0, GTK_SORT_ASCENDING);
921 signal_monitor_assert_is_empty (monitor);
922 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
923 /* The parent node of the child level moved due to sorting */
924 check_sort_order (sort_model, GTK_SORT_ASCENDING, "2");
926 signal_monitor_append_signal_reordered (monitor,
929 signal_monitor_append_signal_reordered (monitor,
931 child_path, order[1], 5);
932 gtk_tree_path_free (child_path);
933 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
934 0, GTK_SORT_DESCENDING);
935 signal_monitor_assert_is_empty (monitor);
936 check_sort_order (sort_model, GTK_SORT_DESCENDING, NULL);
937 /* The parent node of the child level moved due to sorting */
938 check_sort_order (sort_model, GTK_SORT_DESCENDING, "2");
940 child_path = gtk_tree_path_new_from_indices (0, -1);
941 signal_monitor_append_signal_reordered (monitor,
944 signal_monitor_append_signal_reordered (monitor,
946 child_path, order[2], 5);
947 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
948 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
950 signal_monitor_assert_is_empty (monitor);
952 gtk_tree_path_free (path);
953 gtk_tree_path_free (child_path);
954 signal_monitor_free (monitor);
956 gtk_widget_destroy (tree_view);
957 g_object_unref (sort_model);
959 g_object_unref (ref_model);
965 GtkTreeIter iter1, iter2, iter3, iter4, iter5, new_iter;
967 GtkTreeModelRefCount *ref_model;
968 GtkTreeModel *sort_model;
969 GtkWidget *tree_view;
970 SignalMonitor *monitor;
972 GType column_types[] = { G_TYPE_INT };
973 int order0[] = { 1, 2, 3, 0, 4, 5, 6 };
975 model = gtk_tree_model_ref_count_new ();
976 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
978 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
981 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
983 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
985 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
987 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
989 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
992 sort_model = gtk_tree_model_sort_new_with_model (model);
993 tree_view = gtk_tree_view_new_with_model (sort_model);
996 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
997 0, GTK_SORT_ASCENDING);
998 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
1000 monitor = signal_monitor_new (sort_model);
1002 /* Insert a new item */
1003 signal_monitor_append_signal (monitor, ROW_INSERTED, "4");
1004 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &new_iter, NULL,
1006 signal_monitor_assert_is_empty (monitor);
1007 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
1009 /* Sort the tree sort and append a new item */
1010 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
1011 0, GTK_SORT_ASCENDING);
1012 check_sort_order (model, GTK_SORT_ASCENDING, NULL);
1014 path = gtk_tree_path_new ();
1015 signal_monitor_append_signal (monitor, ROW_INSERTED, "0");
1016 signal_monitor_append_signal_reordered (monitor,
1019 signal_monitor_append_signal (monitor, ROW_CHANGED, "3");
1020 gtk_tree_store_append (GTK_TREE_STORE (model), &new_iter, NULL);
1021 gtk_tree_store_set (GTK_TREE_STORE (model), &new_iter, 0, 35, -1);
1022 check_sort_order (model, GTK_SORT_ASCENDING, NULL);
1023 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
1025 gtk_tree_path_free (path);
1026 signal_monitor_free (monitor);
1028 gtk_widget_destroy (tree_view);
1029 g_object_unref (sort_model);
1031 g_object_unref (ref_model);
1036 specific_bug_300089 (void)
1038 /* Test case for GNOME Bugzilla bug 300089. Written by
1041 GtkTreeModel *sort_model, *child_model;
1043 GtkTreeIter iter, iter2, sort_iter;
1045 g_test_bug ("300089");
1047 child_model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_STRING));
1049 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1050 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1051 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1052 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "B", -1);
1054 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1055 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "D", -1);
1056 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1057 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "E", -1);
1059 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1060 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "C", -1);
1063 sort_model = GTK_TREE_MODEL (gtk_tree_model_sort_new_with_model (child_model));
1064 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
1065 0, GTK_SORT_ASCENDING);
1067 path = gtk_tree_path_new_from_indices (1, 1, -1);
1069 /* make sure a level is constructed */
1070 gtk_tree_model_get_iter (sort_model, &sort_iter, path);
1072 /* change the "E" row in a way that causes it to change position */
1073 gtk_tree_model_get_iter (child_model, &iter, path);
1074 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1076 gtk_tree_path_free (path);
1080 specific_bug_364946 (void)
1082 /* This is a test case for GNOME Bugzilla bug 364946. It was written
1083 * by Andreas Koehler.
1085 GtkTreeStore *store;
1086 GtkTreeIter a, aa, aaa, aab, iter;
1087 GtkTreeModel *s_model;
1089 g_test_bug ("364946");
1091 store = gtk_tree_store_new (1, G_TYPE_STRING);
1093 gtk_tree_store_append (store, &a, NULL);
1094 gtk_tree_store_set (store, &a, 0, "0", -1);
1096 gtk_tree_store_append (store, &aa, &a);
1097 gtk_tree_store_set (store, &aa, 0, "0:0", -1);
1099 gtk_tree_store_append (store, &aaa, &aa);
1100 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1102 gtk_tree_store_append (store, &aab, &aa);
1103 gtk_tree_store_set (store, &aab, 0, "0:0:1", -1);
1105 s_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1106 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (s_model), 0,
1107 GTK_SORT_ASCENDING);
1109 gtk_tree_model_get_iter_from_string (s_model, &iter, "0:0:0");
1111 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1112 gtk_tree_store_remove (store, &aaa);
1113 gtk_tree_store_remove (store, &aab);
1115 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (s_model));
1121 register_sort_model_tests (void)
1123 g_test_add_func ("/TreeModelSort/ref-count/single-level",
1124 ref_count_single_level);
1125 g_test_add_func ("/TreeModelSort/ref-count/two-levels",
1126 ref_count_two_levels);
1127 g_test_add_func ("/TreeModelSort/ref-count/three-levels",
1128 ref_count_three_levels);
1129 g_test_add_func ("/TreeModelSort/ref-count/delete-row",
1130 ref_count_delete_row);
1131 g_test_add_func ("/TreeModelSort/ref-count/cleanup",
1133 g_test_add_func ("/TreeModelSort/ref-count/row-ref",
1135 g_test_add_func ("/TreeModelSort/ref-count/reorder/single-level",
1136 ref_count_reorder_single);
1137 g_test_add_func ("/TreeModelSort/ref-count/reorder/two-levels",
1138 ref_count_reorder_two);
1140 g_test_add_func ("/TreeModelSort/rows-reordered/single-level",
1141 rows_reordered_single_level);
1142 g_test_add_func ("/TreeModelSort/rows-reordered/two-levels",
1143 rows_reordered_two_levels);
1144 g_test_add_func ("/TreeModelSort/sorted-insert",
1147 g_test_add_func ("/TreeModelSort/specific/bug-300089",
1148 specific_bug_300089);
1149 g_test_add_func ("/TreeModelSort/specific/bug-364946",
1150 specific_bug_364946);