Compare commits

...

2 Commits

Author SHA1 Message Date
Matthias Clasen
c6dbfc85e9 maplistmodel: Actually clear nodes
When we drop our weak ref, we better reset the pointer too.
2022-07-14 20:22:22 -04:00
Matthias Clasen
404f39551e maplistmodel: Improve test coverage 2022-07-14 20:20:26 -04:00
2 changed files with 42 additions and 1 deletions

View File

@@ -484,7 +484,10 @@ gtk_map_list_model_clear_node (gpointer _node)
MapNode *node = _node;
if (node->item)
g_object_remove_weak_pointer (node->item, &node->item);
{
g_object_remove_weak_pointer (node->item, &node->item);
node->item = NULL;
}
}
static void

View File

@@ -223,6 +223,11 @@ test_create_empty (void)
map = new_model (NULL);
assert_model (map, "");
assert_changes (map, "");
g_assert_true (g_list_model_get_item_type (G_LIST_MODEL (map)) == G_TYPE_OBJECT);
g_assert_true (g_list_model_get_n_items (G_LIST_MODEL (map)) == 0);
g_assert_true (g_list_model_get_item (G_LIST_MODEL (map), 0) == NULL);
g_assert_true (gtk_map_list_model_get_model (map) == NULL);
g_assert_true (gtk_map_list_model_has_map (map));
g_object_unref (map);
}
@@ -280,14 +285,17 @@ test_set_map_func (void)
assert_changes (map, "");
gtk_map_list_model_set_map_func (map, map_multiply, GUINT_TO_POINTER (3), NULL);
g_assert_true (gtk_map_list_model_has_map (map));
assert_model (map, "3 6 9 12 15");
assert_changes (map, "0-5+5");
gtk_map_list_model_set_map_func (map, NULL, NULL, NULL);
g_assert_false (gtk_map_list_model_has_map (map));
assert_model (map, "1 2 3 4 5");
assert_changes (map, "0-5+5");
gtk_map_list_model_set_map_func (map, map_multiply, GUINT_TO_POINTER (2), NULL);
g_assert_true (gtk_map_list_model_has_map (map));
assert_model (map, "2 4 6 8 10");
assert_changes (map, "0-5+5");
@@ -309,6 +317,9 @@ test_add_items (void)
add (store, 6);
assert_model (map, "2 4 6 8 10 12");
assert_changes (map, "+5*");
g_object_unref (store);
g_object_unref (map);
}
static void
@@ -325,6 +336,9 @@ test_remove_items (void)
g_list_store_remove (store, 2);
assert_model (map, "2 4 8 10");
assert_changes (map, "-2*");
g_object_unref (store);
g_object_unref (map);
}
static void
@@ -332,6 +346,7 @@ test_splice (void)
{
GtkMapListModel *map;
GListStore *store;
GObject *items[5];
store = new_store (1, 5, 1);
map = new_model (store);
@@ -341,6 +356,29 @@ test_splice (void)
splice (store, 2, 2, (guint[]){ 4, 3 }, 2);
assert_model (map, "2 4 8 6 10");
assert_changes (map, "2-2+2");
for (int i = 0; i < 5; i++)
{
items[i] = g_list_model_get_item (G_LIST_MODEL (map), i);
g_assert_true (items[i] != NULL);
}
splice (store, 1, 1, (guint[]){ 1, 2, 5 }, 3);
assert_model (map, "2 2 4 10 8 6 10");
assert_changes (map, "1-1+3*");
for (int i = 0; i < 5; i++)
{
GObject *item = g_list_model_get_item (G_LIST_MODEL (map), i);
g_assert_true (item != NULL);
if (i == 0)
g_assert (item == items[0]);
g_object_unref (item);
g_object_unref (items[i]);
}
g_object_unref (store);
g_object_unref (map);
}
int