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, see <http://www.gnu.org/licenses/>.
20 #include "treemodel.h"
21 #include "gtktreemodelrefcount.h"
25 ref_count_single_level (void)
29 GtkTreeModelRefCount *ref_model;
30 GtkTreeModel *sort_model;
33 model = gtk_tree_model_ref_count_new ();
34 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
36 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
37 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
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);
42 assert_root_level_unreferenced (ref_model);
44 sort_model = gtk_tree_model_sort_new_with_model (model);
45 tree_view = gtk_tree_view_new_with_model (sort_model);
47 assert_entire_model_referenced (ref_model, 1);
49 gtk_widget_destroy (tree_view);
51 assert_entire_model_unreferenced (ref_model);
53 g_object_unref (sort_model);
54 g_object_unref (ref_model);
58 ref_count_two_levels (void)
60 GtkTreeIter parent1, parent2, iter;
62 GtkTreeModelRefCount *ref_model;
63 GtkTreeModel *sort_model;
66 model = gtk_tree_model_ref_count_new ();
67 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
69 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, NULL);
70 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, NULL);
71 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
72 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
73 gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent2);
75 assert_entire_model_unreferenced (ref_model);
77 sort_model = gtk_tree_model_sort_new_with_model (model);
78 tree_view = gtk_tree_view_new_with_model (sort_model);
80 assert_root_level_referenced (ref_model, 1);
81 assert_node_ref_count (ref_model, &iter, 0);
83 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
85 assert_node_ref_count (ref_model, &parent1, 1);
86 assert_node_ref_count (ref_model, &parent2, 2);
87 assert_node_ref_count (ref_model, &iter, 1);
89 gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
91 assert_node_ref_count (ref_model, &parent1, 1);
92 assert_node_ref_count (ref_model, &parent2, 2);
93 assert_node_ref_count (ref_model, &iter, 0);
95 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
97 assert_root_level_referenced (ref_model, 1);
98 assert_node_ref_count (ref_model, &iter, 0);
100 gtk_widget_destroy (tree_view);
102 assert_entire_model_unreferenced (ref_model);
104 g_object_unref (sort_model);
105 g_object_unref (ref_model);
109 ref_count_three_levels (void)
111 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
112 GtkTreeIter iter_parent1, iter_parent2;
114 GtkTreeModelRefCount *ref_model;
115 GtkTreeModel *sort_model;
117 GtkWidget *tree_view;
119 model = gtk_tree_model_ref_count_new ();
120 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
131 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
132 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
133 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
134 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
135 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
136 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
137 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
139 assert_entire_model_unreferenced (ref_model);
141 sort_model = gtk_tree_model_sort_new_with_model (model);
142 tree_view = gtk_tree_view_new_with_model (sort_model);
144 assert_root_level_referenced (ref_model, 1);
145 assert_node_ref_count (ref_model, &parent1, 0);
146 assert_node_ref_count (ref_model, &parent2, 0);
147 assert_level_unreferenced (ref_model, &parent1);
148 assert_level_unreferenced (ref_model, &parent2);
150 path = gtk_tree_path_new_from_indices (1, -1);
151 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
153 assert_node_ref_count (ref_model, &grandparent1, 1);
154 assert_node_ref_count (ref_model, &grandparent2, 2);
155 assert_node_ref_count (ref_model, &parent1, 1);
156 assert_node_ref_count (ref_model, &parent2, 1);
157 assert_node_ref_count (ref_model, &iter_parent1, 0);
158 assert_node_ref_count (ref_model, &iter_parent2, 0);
160 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
162 assert_node_ref_count (ref_model, &grandparent1, 1);
163 assert_node_ref_count (ref_model, &grandparent2, 2);
164 assert_node_ref_count (ref_model, &parent1, 2);
165 assert_node_ref_count (ref_model, &parent2, 2);
166 assert_node_ref_count (ref_model, &iter_parent1, 1);
167 assert_node_ref_count (ref_model, &iter_parent2, 1);
169 gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
171 assert_node_ref_count (ref_model, &grandparent1, 1);
172 assert_node_ref_count (ref_model, &grandparent2, 2);
173 assert_node_ref_count (ref_model, &parent1, 1);
174 assert_node_ref_count (ref_model, &parent2, 1);
175 assert_node_ref_count (ref_model, &iter_parent1, 0);
176 assert_node_ref_count (ref_model, &iter_parent2, 0);
178 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
180 assert_root_level_referenced (ref_model, 1);
181 assert_node_ref_count (ref_model, &parent1, 0);
182 assert_node_ref_count (ref_model, &parent2, 0);
184 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
186 assert_node_ref_count (ref_model, &grandparent1, 1);
187 assert_node_ref_count (ref_model, &grandparent2, 2);
188 assert_node_ref_count (ref_model, &parent1, 1);
189 assert_node_ref_count (ref_model, &parent2, 1);
190 assert_node_ref_count (ref_model, &iter_parent1, 0);
191 assert_node_ref_count (ref_model, &iter_parent2, 0);
193 gtk_tree_path_append_index (path, 1);
194 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, FALSE);
196 assert_node_ref_count (ref_model, &grandparent1, 1);
197 assert_node_ref_count (ref_model, &grandparent2, 2);
198 assert_node_ref_count (ref_model, &parent1, 1);
199 assert_node_ref_count (ref_model, &parent2, 2);
200 assert_node_ref_count (ref_model, &iter_parent1, 0);
201 assert_node_ref_count (ref_model, &iter_parent2, 1);
203 gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
205 assert_node_ref_count (ref_model, &grandparent1, 1);
206 assert_node_ref_count (ref_model, &grandparent2, 2);
207 assert_node_ref_count (ref_model, &parent1, 1);
208 assert_node_ref_count (ref_model, &parent2, 2);
209 assert_node_ref_count (ref_model, &iter_parent1, 0);
210 assert_node_ref_count (ref_model, &iter_parent2, 0);
212 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
214 assert_node_ref_count (ref_model, &grandparent1, 1);
215 assert_node_ref_count (ref_model, &grandparent2, 2);
216 assert_node_ref_count (ref_model, &parent1, 1);
217 assert_node_ref_count (ref_model, &parent2, 1);
218 assert_node_ref_count (ref_model, &iter_parent1, 0);
219 assert_node_ref_count (ref_model, &iter_parent2, 0);
221 gtk_tree_path_up (path);
222 gtk_tree_view_collapse_row (GTK_TREE_VIEW (tree_view), path);
223 gtk_tree_path_free (path);
225 assert_node_ref_count (ref_model, &grandparent1, 1);
226 assert_node_ref_count (ref_model, &grandparent2, 2);
227 assert_node_ref_count (ref_model, &parent1, 0);
228 assert_node_ref_count (ref_model, &parent2, 0);
229 assert_node_ref_count (ref_model, &iter_parent1, 0);
230 assert_node_ref_count (ref_model, &iter_parent2, 0);
232 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
234 assert_node_ref_count (ref_model, &grandparent1, 1);
235 assert_node_ref_count (ref_model, &grandparent2, 1);
236 assert_node_ref_count (ref_model, &parent1, 0);
237 assert_node_ref_count (ref_model, &parent2, 0);
238 assert_node_ref_count (ref_model, &iter_parent1, 0);
239 assert_node_ref_count (ref_model, &iter_parent2, 0);
241 gtk_widget_destroy (tree_view);
243 assert_entire_model_unreferenced (ref_model);
245 g_object_unref (sort_model);
246 g_object_unref (ref_model);
250 ref_count_delete_row (void)
252 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
253 GtkTreeIter iter_parent1, iter_parent2;
255 GtkTreeModelRefCount *ref_model;
256 GtkTreeModel *sort_model;
258 GtkWidget *tree_view;
260 model = gtk_tree_model_ref_count_new ();
261 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
272 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
273 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
274 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
275 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
276 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
277 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
278 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
280 assert_entire_model_unreferenced (ref_model);
282 sort_model = gtk_tree_model_sort_new_with_model (model);
283 tree_view = gtk_tree_view_new_with_model (sort_model);
285 assert_root_level_referenced (ref_model, 1);
286 assert_node_ref_count (ref_model, &parent1, 0);
287 assert_node_ref_count (ref_model, &parent2, 0);
288 assert_level_unreferenced (ref_model, &parent1);
289 assert_level_unreferenced (ref_model, &parent2);
291 path = gtk_tree_path_new_from_indices (1, -1);
292 gtk_tree_view_expand_row (GTK_TREE_VIEW (tree_view), path, TRUE);
293 gtk_tree_path_free (path);
295 assert_node_ref_count (ref_model, &grandparent1, 1);
296 assert_node_ref_count (ref_model, &grandparent2, 2);
297 assert_node_ref_count (ref_model, &parent1, 2);
298 assert_node_ref_count (ref_model, &parent2, 2);
299 assert_node_ref_count (ref_model, &iter_parent1, 1);
300 assert_node_ref_count (ref_model, &iter_parent2, 1);
302 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter_parent2);
304 assert_node_ref_count (ref_model, &grandparent1, 1);
305 assert_node_ref_count (ref_model, &grandparent2, 2);
306 assert_node_ref_count (ref_model, &parent1, 2);
307 assert_level_referenced (ref_model, 1, &parent1);
308 assert_node_ref_count (ref_model, &parent2, 2);
309 assert_level_referenced (ref_model, 1, &parent2);
311 gtk_tree_store_remove (GTK_TREE_STORE (model), &parent1);
313 assert_node_ref_count (ref_model, &grandparent1, 1);
314 assert_node_ref_count (ref_model, &grandparent2, 2);
315 assert_node_ref_count (ref_model, &parent2, 2);
316 assert_level_referenced (ref_model, 1, &parent2);
318 gtk_tree_store_remove (GTK_TREE_STORE (model), &grandparent2);
320 assert_node_ref_count (ref_model, &grandparent1, 1);
322 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
324 assert_node_ref_count (ref_model, &grandparent1, 1);
326 gtk_widget_destroy (tree_view);
328 assert_entire_model_unreferenced (ref_model);
330 g_object_unref (sort_model);
331 g_object_unref (ref_model);
335 ref_count_cleanup (void)
337 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
338 GtkTreeIter iter_parent1, iter_parent2;
340 GtkTreeModelRefCount *ref_model;
341 GtkTreeModel *sort_model;
342 GtkWidget *tree_view;
344 model = gtk_tree_model_ref_count_new ();
345 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
356 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
357 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
358 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
359 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
360 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
361 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
362 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
364 sort_model = gtk_tree_model_sort_new_with_model (model);
365 tree_view = gtk_tree_view_new_with_model (sort_model);
367 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
369 gtk_widget_destroy (tree_view);
371 assert_node_ref_count (ref_model, &grandparent1, 0);
372 assert_node_ref_count (ref_model, &grandparent2, 1);
373 assert_node_ref_count (ref_model, &parent1, 1);
374 assert_node_ref_count (ref_model, &parent2, 1);
375 assert_node_ref_count (ref_model, &iter_parent1, 0);
376 assert_node_ref_count (ref_model, &iter_parent2, 0);
378 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (sort_model));
380 assert_entire_model_unreferenced (ref_model);
382 g_object_unref (sort_model);
383 g_object_unref (ref_model);
387 ref_count_row_ref (void)
389 GtkTreeIter grandparent1, grandparent2, parent1, parent2;
390 GtkTreeIter iter_parent1, iter_parent2;
392 GtkTreeModelRefCount *ref_model;
393 GtkTreeModel *sort_model;
394 GtkWidget *tree_view;
396 GtkTreeRowReference *row_ref;
398 model = gtk_tree_model_ref_count_new ();
399 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
410 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent1, NULL);
411 gtk_tree_store_append (GTK_TREE_STORE (model), &grandparent2, NULL);
412 gtk_tree_store_append (GTK_TREE_STORE (model), &parent1, &grandparent2);
413 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent1, &parent1);
414 gtk_tree_store_append (GTK_TREE_STORE (model), &parent2, &grandparent2);
415 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
416 gtk_tree_store_append (GTK_TREE_STORE (model), &iter_parent2, &parent2);
418 sort_model = gtk_tree_model_sort_new_with_model (model);
419 tree_view = gtk_tree_view_new_with_model (sort_model);
421 path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
422 row_ref = gtk_tree_row_reference_new (sort_model, path);
423 gtk_tree_path_free (path);
425 assert_node_ref_count (ref_model, &grandparent1, 1);
426 /* Referenced because the node is visible, its child level is built
427 * and referenced by the row ref.
429 assert_node_ref_count (ref_model, &grandparent2, 3);
430 assert_node_ref_count (ref_model, &parent1, 0);
431 /* Referenced by the row ref and because its child level is built. */
432 assert_node_ref_count (ref_model, &parent2, 2);
433 assert_node_ref_count (ref_model, &iter_parent1, 0);
434 assert_node_ref_count (ref_model, &iter_parent2, 1);
436 gtk_tree_row_reference_free (row_ref);
438 assert_node_ref_count (ref_model, &grandparent1, 1);
439 assert_node_ref_count (ref_model, &grandparent2, 2);
440 assert_node_ref_count (ref_model, &parent1, 0);
441 assert_node_ref_count (ref_model, &parent2, 1);
442 assert_node_ref_count (ref_model, &iter_parent1, 0);
443 assert_node_ref_count (ref_model, &iter_parent2, 0);
445 path = gtk_tree_path_new_from_indices (1, 1, 1, -1);
446 row_ref = gtk_tree_row_reference_new (sort_model, path);
447 gtk_tree_path_free (path);
449 assert_node_ref_count (ref_model, &grandparent1, 1);
450 /* Referenced because the node is visible, its child level is built
451 * and referenced by the row ref.
453 assert_node_ref_count (ref_model, &grandparent2, 3);
454 assert_node_ref_count (ref_model, &parent1, 0);
455 /* Referenced by the row ref and because its child level is built. */
456 assert_node_ref_count (ref_model, &parent2, 2);
457 assert_node_ref_count (ref_model, &iter_parent1, 0);
458 assert_node_ref_count (ref_model, &iter_parent2, 1);
460 gtk_tree_store_remove (GTK_TREE_STORE (model), &parent2);
462 assert_node_ref_count (ref_model, &grandparent1, 1);
463 assert_node_ref_count (ref_model, &grandparent2, 1);
464 assert_node_ref_count (ref_model, &parent1, 0);
465 assert_node_ref_count (ref_model, &iter_parent1, 0);
467 gtk_tree_row_reference_free (row_ref);
469 assert_node_ref_count (ref_model, &grandparent1, 1);
470 assert_node_ref_count (ref_model, &grandparent2, 1);
471 assert_node_ref_count (ref_model, &parent1, 0);
472 assert_node_ref_count (ref_model, &iter_parent1, 0);
474 gtk_widget_destroy (tree_view);
475 g_object_unref (sort_model);
477 assert_entire_model_unreferenced (ref_model);
479 g_object_unref (ref_model);
483 ref_count_reorder_single (void)
485 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
486 GtkTreeIter siter1, siter2, siter3, siter4, siter5;
488 GtkTreeModelRefCount *ref_model;
489 GtkTreeModel *sort_model;
490 GtkWidget *tree_view;
491 GType column_types[] = { G_TYPE_INT };
493 model = gtk_tree_model_ref_count_new ();
494 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
496 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
499 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
501 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
503 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
505 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
507 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
510 assert_root_level_unreferenced (ref_model);
512 sort_model = gtk_tree_model_sort_new_with_model (model);
513 tree_view = gtk_tree_view_new_with_model (sort_model);
515 assert_entire_model_referenced (ref_model, 1);
517 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
518 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
519 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
520 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
521 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
523 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
524 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
526 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
527 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
528 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
530 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter5);
532 assert_node_ref_count (ref_model, &iter1, 3);
533 assert_node_ref_count (ref_model, &iter2, 1);
534 assert_node_ref_count (ref_model, &iter3, 4);
535 assert_node_ref_count (ref_model, &iter4, 1);
536 assert_node_ref_count (ref_model, &iter5, 2);
539 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
540 0, GTK_SORT_ASCENDING);
542 assert_node_ref_count (ref_model, &iter1, 3);
543 assert_node_ref_count (ref_model, &iter2, 1);
544 assert_node_ref_count (ref_model, &iter3, 4);
545 assert_node_ref_count (ref_model, &iter4, 1);
546 assert_node_ref_count (ref_model, &iter5, 2);
548 /* Re-translate the iters after sorting */
549 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
550 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
551 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
552 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
553 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
555 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
556 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
558 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
559 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
560 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
562 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter5);
564 assert_entire_model_referenced (ref_model, 1);
566 gtk_widget_destroy (tree_view);
567 g_object_unref (sort_model);
569 assert_entire_model_unreferenced (ref_model);
571 g_object_unref (ref_model);
575 ref_count_reorder_two (void)
577 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
578 GtkTreeIter citer1, citer2, citer3, citer4, citer5;
579 GtkTreeIter siter1, siter2, siter3, siter4, siter5;
580 GtkTreeIter sciter1, sciter2, sciter3, sciter4, sciter5;
582 GtkTreeModelRefCount *ref_model;
583 GtkTreeModel *sort_model;
584 GtkWidget *tree_view;
585 GType column_types[] = { G_TYPE_INT };
587 model = gtk_tree_model_ref_count_new ();
588 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
590 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
593 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
595 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
597 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
599 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
601 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
605 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer1, &iter1, 0,
607 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer2, &iter1, 1,
609 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer3, &iter1, 2,
611 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer4, &iter1, 3,
613 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer5, &iter1, 4,
616 assert_root_level_unreferenced (ref_model);
618 sort_model = gtk_tree_model_sort_new_with_model (model);
619 tree_view = gtk_tree_view_new_with_model (sort_model);
620 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
622 assert_node_ref_count (ref_model, &iter1, 2);
623 assert_node_ref_count (ref_model, &iter2, 1);
624 assert_node_ref_count (ref_model, &iter3, 1);
625 assert_node_ref_count (ref_model, &iter4, 1);
626 assert_node_ref_count (ref_model, &iter5, 1);
628 assert_level_referenced (ref_model, 1, &iter1);
630 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
631 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
632 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
633 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
634 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
636 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter1, &citer1);
637 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter2, &citer2);
638 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter3, &citer3);
639 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter4, &citer4);
640 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter5, &citer5);
642 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
643 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter1);
645 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
646 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
647 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter3);
649 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &siter5);
651 assert_node_ref_count (ref_model, &iter1, 4);
652 assert_node_ref_count (ref_model, &iter2, 1);
653 assert_node_ref_count (ref_model, &iter3, 4);
654 assert_node_ref_count (ref_model, &iter4, 1);
655 assert_node_ref_count (ref_model, &iter5, 2);
657 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter3);
658 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter3);
660 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
661 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
662 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter5);
664 gtk_tree_model_ref_node (GTK_TREE_MODEL (sort_model), &sciter1);
666 assert_node_ref_count (ref_model, &citer1, 2);
667 assert_node_ref_count (ref_model, &citer2, 1);
668 assert_node_ref_count (ref_model, &citer3, 3);
669 assert_node_ref_count (ref_model, &citer4, 1);
670 assert_node_ref_count (ref_model, &citer5, 4);
673 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
674 0, GTK_SORT_ASCENDING);
676 assert_node_ref_count (ref_model, &iter1, 4);
677 assert_node_ref_count (ref_model, &iter2, 1);
678 assert_node_ref_count (ref_model, &iter3, 4);
679 assert_node_ref_count (ref_model, &iter4, 1);
680 assert_node_ref_count (ref_model, &iter5, 2);
682 assert_node_ref_count (ref_model, &citer1, 2);
683 assert_node_ref_count (ref_model, &citer2, 1);
684 assert_node_ref_count (ref_model, &citer3, 3);
685 assert_node_ref_count (ref_model, &citer4, 1);
686 assert_node_ref_count (ref_model, &citer5, 4);
688 /* Re-translate the iters after sorting */
689 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter1, &iter1);
690 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter2, &iter2);
691 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter3, &iter3);
692 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter4, &iter4);
693 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &siter5, &iter5);
695 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter1, &citer1);
696 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter2, &citer2);
697 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter3, &citer3);
698 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter4, &citer4);
699 gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &sciter5, &citer5);
701 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
702 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter1);
704 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
705 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
706 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter3);
708 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &siter5);
710 assert_node_ref_count (ref_model, &iter1, 2);
711 assert_node_ref_count (ref_model, &iter2, 1);
712 assert_node_ref_count (ref_model, &iter3, 1);
713 assert_node_ref_count (ref_model, &iter4, 1);
714 assert_node_ref_count (ref_model, &iter5, 1);
716 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter3);
717 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter3);
719 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
720 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
721 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter5);
723 gtk_tree_model_unref_node (GTK_TREE_MODEL (sort_model), &sciter1);
725 assert_level_referenced (ref_model, 1, &iter1);
727 gtk_widget_destroy (tree_view);
728 g_object_unref (sort_model);
730 assert_entire_model_unreferenced (ref_model);
732 g_object_unref (ref_model);
736 check_sort_order (GtkTreeModel *sort_model,
737 GtkSortType sort_order,
738 const char *parent_path)
744 gtk_tree_model_get_iter_first (sort_model, &siter);
749 path = gtk_tree_path_new_from_string (parent_path);
750 gtk_tree_path_append_index (path, 0);
752 gtk_tree_model_get_iter (sort_model, &siter, path);
754 gtk_tree_path_free (path);
757 if (sort_order == GTK_SORT_ASCENDING)
760 prev_value = INT_MAX;
766 gtk_tree_model_get (sort_model, &siter, 0, &value, -1);
767 if (sort_order == GTK_SORT_ASCENDING)
768 g_assert (prev_value <= value);
770 g_assert (prev_value >= value);
774 while (gtk_tree_model_iter_next (sort_model, &siter));
778 rows_reordered_single_level (void)
780 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
782 GtkTreeModelRefCount *ref_model;
783 GtkTreeModel *sort_model;
784 GtkWidget *tree_view;
785 SignalMonitor *monitor;
787 GType column_types[] = { G_TYPE_INT };
795 model = gtk_tree_model_ref_count_new ();
796 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
798 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
801 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
803 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
805 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
807 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
809 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
812 sort_model = gtk_tree_model_sort_new_with_model (model);
813 tree_view = gtk_tree_view_new_with_model (sort_model);
815 monitor = signal_monitor_new (sort_model);
818 path = gtk_tree_path_new ();
819 signal_monitor_append_signal_reordered (monitor,
822 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
823 0, GTK_SORT_ASCENDING);
824 signal_monitor_assert_is_empty (monitor);
825 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
827 signal_monitor_append_signal_reordered (monitor,
830 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
831 0, GTK_SORT_DESCENDING);
832 signal_monitor_assert_is_empty (monitor);
833 check_sort_order (sort_model, GTK_SORT_DESCENDING, NULL);
835 signal_monitor_append_signal_reordered (monitor,
838 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
839 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
841 signal_monitor_assert_is_empty (monitor);
843 gtk_tree_path_free (path);
844 signal_monitor_free (monitor);
846 gtk_widget_destroy (tree_view);
847 g_object_unref (sort_model);
849 assert_entire_model_unreferenced (ref_model);
851 g_object_unref (ref_model);
855 rows_reordered_two_levels (void)
857 GtkTreeIter iter1, iter2, iter3, iter4, iter5;
858 GtkTreeIter citer1, citer2, citer3, citer4, citer5;
860 GtkTreeModelRefCount *ref_model;
861 GtkTreeModel *sort_model;
862 GtkWidget *tree_view;
863 SignalMonitor *monitor;
864 GtkTreePath *path, *child_path;
865 GType column_types[] = { G_TYPE_INT };
873 model = gtk_tree_model_ref_count_new ();
874 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
876 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
879 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
881 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
883 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
885 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
887 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
891 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer1, &iter1, 0,
893 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer2, &iter1, 1,
895 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer3, &iter1, 2,
897 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer4, &iter1, 3,
899 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &citer5, &iter1, 4,
902 sort_model = gtk_tree_model_sort_new_with_model (model);
903 tree_view = gtk_tree_view_new_with_model (sort_model);
904 gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
906 monitor = signal_monitor_new (sort_model);
909 path = gtk_tree_path_new ();
910 child_path = gtk_tree_path_new_from_indices (2, -1);
911 signal_monitor_append_signal_reordered (monitor,
914 signal_monitor_append_signal_reordered (monitor,
916 child_path, order[0], 5);
917 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
918 0, GTK_SORT_ASCENDING);
919 signal_monitor_assert_is_empty (monitor);
920 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
921 /* The parent node of the child level moved due to sorting */
922 check_sort_order (sort_model, GTK_SORT_ASCENDING, "2");
924 signal_monitor_append_signal_reordered (monitor,
927 signal_monitor_append_signal_reordered (monitor,
929 child_path, order[1], 5);
930 gtk_tree_path_free (child_path);
931 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
932 0, GTK_SORT_DESCENDING);
933 signal_monitor_assert_is_empty (monitor);
934 check_sort_order (sort_model, GTK_SORT_DESCENDING, NULL);
935 /* The parent node of the child level moved due to sorting */
936 check_sort_order (sort_model, GTK_SORT_DESCENDING, "2");
938 child_path = gtk_tree_path_new_from_indices (0, -1);
939 signal_monitor_append_signal_reordered (monitor,
942 signal_monitor_append_signal_reordered (monitor,
944 child_path, order[2], 5);
945 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
946 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
948 signal_monitor_assert_is_empty (monitor);
950 gtk_tree_path_free (path);
951 gtk_tree_path_free (child_path);
952 signal_monitor_free (monitor);
954 gtk_widget_destroy (tree_view);
955 g_object_unref (sort_model);
957 g_object_unref (ref_model);
963 GtkTreeIter iter1, iter2, iter3, iter4, iter5, new_iter;
965 GtkTreeModelRefCount *ref_model;
966 GtkTreeModel *sort_model;
967 GtkWidget *tree_view;
968 SignalMonitor *monitor;
970 GType column_types[] = { G_TYPE_INT };
971 int order0[] = { 1, 2, 3, 0, 4, 5, 6 };
973 model = gtk_tree_model_ref_count_new ();
974 ref_model = GTK_TREE_MODEL_REF_COUNT (model);
976 gtk_tree_store_set_column_types (GTK_TREE_STORE (model), 1,
979 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter1, NULL, 0,
981 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter2, NULL, 1,
983 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter3, NULL, 2,
985 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter4, NULL, 3,
987 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter5, NULL, 4,
990 sort_model = gtk_tree_model_sort_new_with_model (model);
991 tree_view = gtk_tree_view_new_with_model (sort_model);
994 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
995 0, GTK_SORT_ASCENDING);
996 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
998 monitor = signal_monitor_new (sort_model);
1000 /* Insert a new item */
1001 signal_monitor_append_signal (monitor, ROW_INSERTED, "4");
1002 gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &new_iter, NULL,
1004 signal_monitor_assert_is_empty (monitor);
1005 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
1007 /* Sort the tree sort and append a new item */
1008 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
1009 0, GTK_SORT_ASCENDING);
1010 check_sort_order (model, GTK_SORT_ASCENDING, NULL);
1012 path = gtk_tree_path_new ();
1013 signal_monitor_append_signal (monitor, ROW_INSERTED, "0");
1014 signal_monitor_append_signal_reordered (monitor,
1017 signal_monitor_append_signal (monitor, ROW_CHANGED, "3");
1018 gtk_tree_store_append (GTK_TREE_STORE (model), &new_iter, NULL);
1019 gtk_tree_store_set (GTK_TREE_STORE (model), &new_iter, 0, 35, -1);
1020 check_sort_order (model, GTK_SORT_ASCENDING, NULL);
1021 check_sort_order (sort_model, GTK_SORT_ASCENDING, NULL);
1023 gtk_tree_path_free (path);
1024 signal_monitor_free (monitor);
1026 gtk_widget_destroy (tree_view);
1027 g_object_unref (sort_model);
1029 g_object_unref (ref_model);
1034 specific_bug_300089 (void)
1036 /* Test case for GNOME Bugzilla bug 300089. Written by
1039 GtkTreeModel *sort_model, *child_model;
1041 GtkTreeIter iter, iter2, sort_iter;
1043 g_test_bug ("300089");
1045 child_model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_STRING));
1047 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1048 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1049 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1050 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "B", -1);
1052 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter2, &iter);
1053 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter2, 0, "D", -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, "E", -1);
1057 gtk_tree_store_append (GTK_TREE_STORE (child_model), &iter, NULL);
1058 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "C", -1);
1061 sort_model = GTK_TREE_MODEL (gtk_tree_model_sort_new_with_model (child_model));
1062 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
1063 0, GTK_SORT_ASCENDING);
1065 path = gtk_tree_path_new_from_indices (1, 1, -1);
1067 /* make sure a level is constructed */
1068 gtk_tree_model_get_iter (sort_model, &sort_iter, path);
1070 /* change the "E" row in a way that causes it to change position */
1071 gtk_tree_model_get_iter (child_model, &iter, path);
1072 gtk_tree_store_set (GTK_TREE_STORE (child_model), &iter, 0, "A", -1);
1074 gtk_tree_path_free (path);
1078 specific_bug_364946 (void)
1080 /* This is a test case for GNOME Bugzilla bug 364946. It was written
1081 * by Andreas Koehler.
1083 GtkTreeStore *store;
1084 GtkTreeIter a, aa, aaa, aab, iter;
1085 GtkTreeModel *s_model;
1087 g_test_bug ("364946");
1089 store = gtk_tree_store_new (1, G_TYPE_STRING);
1091 gtk_tree_store_append (store, &a, NULL);
1092 gtk_tree_store_set (store, &a, 0, "0", -1);
1094 gtk_tree_store_append (store, &aa, &a);
1095 gtk_tree_store_set (store, &aa, 0, "0:0", -1);
1097 gtk_tree_store_append (store, &aaa, &aa);
1098 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1100 gtk_tree_store_append (store, &aab, &aa);
1101 gtk_tree_store_set (store, &aab, 0, "0:0:1", -1);
1103 s_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
1104 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (s_model), 0,
1105 GTK_SORT_ASCENDING);
1107 gtk_tree_model_get_iter_from_string (s_model, &iter, "0:0:0");
1109 gtk_tree_store_set (store, &aaa, 0, "0:0:0", -1);
1110 gtk_tree_store_remove (store, &aaa);
1111 gtk_tree_store_remove (store, &aab);
1113 gtk_tree_model_sort_clear_cache (GTK_TREE_MODEL_SORT (s_model));
1117 iter_test (GtkTreeModel *model)
1121 g_assert (gtk_tree_model_get_iter_first (model, &a));
1123 g_assert (gtk_tree_model_iter_next (model, &a));
1124 g_assert (gtk_tree_model_iter_next (model, &a));
1126 g_assert (!gtk_tree_model_iter_next (model, &b));
1128 g_assert (gtk_tree_model_iter_previous (model, &a));
1129 g_assert (gtk_tree_model_iter_previous (model, &a));
1131 g_assert (!gtk_tree_model_iter_previous (model, &b));
1135 specific_bug_674587 (void)
1142 l = gtk_list_store_new (1, G_TYPE_STRING);
1144 gtk_list_store_append (l, &a);
1145 gtk_list_store_set (l, &a, 0, "0", -1);
1146 gtk_list_store_append (l, &a);
1147 gtk_list_store_set (l, &a, 0, "1", -1);
1148 gtk_list_store_append (l, &a);
1149 gtk_list_store_set (l, &a, 0, "2", -1);
1151 iter_test (GTK_TREE_MODEL (l));
1155 t = gtk_tree_store_new (1, G_TYPE_STRING);
1157 gtk_tree_store_append (t, &a, NULL);
1158 gtk_tree_store_set (t, &a, 0, "0", -1);
1159 gtk_tree_store_append (t, &a, NULL);
1160 gtk_tree_store_set (t, &a, 0, "1", -1);
1161 gtk_tree_store_append (t, &a, NULL);
1162 gtk_tree_store_set (t, &a, 0, "2", -1);
1164 iter_test (GTK_TREE_MODEL (t));
1166 m = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (t));
1177 register_sort_model_tests (void)
1179 g_test_add_func ("/TreeModelSort/ref-count/single-level",
1180 ref_count_single_level);
1181 g_test_add_func ("/TreeModelSort/ref-count/two-levels",
1182 ref_count_two_levels);
1183 g_test_add_func ("/TreeModelSort/ref-count/three-levels",
1184 ref_count_three_levels);
1185 g_test_add_func ("/TreeModelSort/ref-count/delete-row",
1186 ref_count_delete_row);
1187 g_test_add_func ("/TreeModelSort/ref-count/cleanup",
1189 g_test_add_func ("/TreeModelSort/ref-count/row-ref",
1191 g_test_add_func ("/TreeModelSort/ref-count/reorder/single-level",
1192 ref_count_reorder_single);
1193 g_test_add_func ("/TreeModelSort/ref-count/reorder/two-levels",
1194 ref_count_reorder_two);
1196 g_test_add_func ("/TreeModelSort/rows-reordered/single-level",
1197 rows_reordered_single_level);
1198 g_test_add_func ("/TreeModelSort/rows-reordered/two-levels",
1199 rows_reordered_two_levels);
1200 g_test_add_func ("/TreeModelSort/sorted-insert",
1203 g_test_add_func ("/TreeModelSort/specific/bug-300089",
1204 specific_bug_300089);
1205 g_test_add_func ("/TreeModelSort/specific/bug-364946",
1206 specific_bug_364946);
1207 g_test_add_func ("/TreeModelSort/specific/bug-674587",
1208 specific_bug_674587);