tests: improve model filters

This commit is contained in:
Christian Hergert
2017-11-24 21:58:39 -08:00
parent 64da43caf3
commit 5338eeee1f

View File

@ -60,6 +60,9 @@ test_basic (void)
model = g_list_store_new (TEST_TYPE_ITEM); model = g_list_store_new (TEST_TYPE_ITEM);
g_assert (model); g_assert (model);
filter = sp_model_filter_new (G_LIST_MODEL (model));
g_assert (filter);
for (i = 0; i < 1000; i++) for (i = 0; i < 1000; i++)
{ {
g_autoptr(TestItem) val = test_item_new (i); g_autoptr(TestItem) val = test_item_new (i);
@ -68,14 +71,20 @@ test_basic (void)
} }
g_assert_cmpint (1000, ==, g_list_model_get_n_items (G_LIST_MODEL (model))); g_assert_cmpint (1000, ==, g_list_model_get_n_items (G_LIST_MODEL (model)));
g_assert_cmpint (1000, ==, g_list_model_get_n_items (G_LIST_MODEL (filter)));
filter = sp_model_filter_new (G_LIST_MODEL (model));
g_assert (filter);
g_assert_cmpint (1000, ==, g_list_model_get_n_items (G_LIST_MODEL (filter))); g_assert_cmpint (1000, ==, g_list_model_get_n_items (G_LIST_MODEL (filter)));
sp_model_filter_set_filter_func (filter, filter_func1, NULL, NULL); sp_model_filter_set_filter_func (filter, filter_func1, NULL, NULL);
g_assert_cmpint (500, ==, g_list_model_get_n_items (G_LIST_MODEL (filter))); g_assert_cmpint (500, ==, g_list_model_get_n_items (G_LIST_MODEL (filter)));
for (i = 0; i < 500; i++)
{
g_autoptr(TestItem) item = g_list_model_get_item (G_LIST_MODEL (filter), i);
g_assert (TEST_IS_ITEM (item));
g_assert (filter_func1 (G_OBJECT (item), NULL));
}
for (i = 0; i < 1000; i += 2) for (i = 0; i < 1000; i += 2)
g_list_store_remove (model, 998 - i); g_list_store_remove (model, 998 - i);
@ -115,10 +124,10 @@ filter_keyword_cb (GObject *object,
gpointer user_data) gpointer user_data)
{ {
SpProcessModelItem *item = SP_PROCESS_MODEL_ITEM (object); SpProcessModelItem *item = SP_PROCESS_MODEL_ITEM (object);
const gchar *needle = user_data;
const gchar *haystack = sp_process_model_item_get_command_line (item); const gchar *haystack = sp_process_model_item_get_command_line (item);
const gchar *needle = user_data;
return NULL != strstr (haystack, needle); return strstr (haystack, needle) != NULL;
} }
static void static void
@ -128,7 +137,7 @@ test_process (void)
SpModelFilter *filter; SpModelFilter *filter;
static gchar *searches[] = { static gchar *searches[] = {
"a", "b", "foo", "bar", "gnome", "gnome-test", "a", "b", "foo", "bar", "gnome", "gnome-test",
"gsd", "gsd-", "libexec", "/", ":", "libexec", "/", ":", "gsd-",
}; };
filter = sp_model_filter_new (G_LIST_MODEL (model)); filter = sp_model_filter_new (G_LIST_MODEL (model));
@ -137,12 +146,22 @@ test_process (void)
for (guint i = 0; i < G_N_ELEMENTS (searches); i++) for (guint i = 0; i < G_N_ELEMENTS (searches); i++)
{ {
sp_model_filter_set_filter_func (filter, const gchar *needle = searches[i];
filter_keyword_cb, guint n_items;
g_strdup (searches[i]),
g_free); sp_model_filter_set_filter_func (filter, filter_keyword_cb, g_strdup (needle), g_free);
sp_model_filter_invalidate (filter);
sp_process_model_reload (model); n_items = g_list_model_get_n_items (G_LIST_MODEL (filter));
for (guint j = 0; j < n_items; j++)
{
g_autoptr(SpProcessModelItem) item = g_list_model_get_item (G_LIST_MODEL (filter), j);
g_assert (SP_IS_PROCESS_MODEL_ITEM (item));
g_assert (filter_keyword_cb (G_OBJECT (item), (gchar *)needle));
//g_print ("%s: %s\n", needle, sp_process_model_item_get_command_line (item));
}
} }
g_object_unref (filter); g_object_unref (filter);