diff options
author | Matthias Clasen <mclasen@redhat.com> | 2022-02-26 18:55:16 -0500 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-04-11 15:59:43 +0200 |
commit | 38cf1e1895d0837c2dada8ba28e03c9a289d16c3 (patch) | |
tree | cd9557ef9418909bdb5725d75b5f2cf390d116f1 | |
parent | d93e276f3f91229ecbce34ae0a6337fe5482d5cf (diff) | |
download | gtk+-38cf1e1895d0837c2dada8ba28e03c9a289d16c3.tar.gz |
Add a test for filterlistmodel sections
-rw-r--r-- | testsuite/gtk/filterlistmodel.c | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/testsuite/gtk/filterlistmodel.c b/testsuite/gtk/filterlistmodel.c index b3c8303daa..6f1465b3d1 100644 --- a/testsuite/gtk/filterlistmodel.c +++ b/testsuite/gtk/filterlistmodel.c @@ -323,7 +323,7 @@ test_change_filter (void) { GtkFilterListModel *filter; GtkFilter *custom; - + filter = new_model (10, is_not_near, GUINT_TO_POINTER (5)); assert_model (filter, "1 2 8 9 10"); assert_changes (filter, ""); @@ -457,6 +457,94 @@ test_add_remove_item (void) g_object_unref (filter); } +static int +sort_func (gconstpointer p1, + gconstpointer p2, + gpointer data) +{ + const char *s1 = gtk_string_object_get_string ((GtkStringObject *)p1); + const char *s2 = gtk_string_object_get_string ((GtkStringObject *)p2); + + /* compare just the first byte */ + return (int)(s1[0]) - (int)(s2[0]); +} + +static gboolean +filter_func (gpointer item, + gpointer data) +{ + const char *s = gtk_string_object_get_string ((GtkStringObject *)item); + + return s[0] == s[1]; +} + +static void +test_sections (void) +{ + GtkStringList *list; + const char *strings[] = { + "aaa", + "aab", + "abc", + "bbb", + "bq1", + "bq2", + "cc", + "cx", + NULL + }; + GtkSorter *sorter; + GtkSortListModel *sorted; + GtkSorter *section_sorter; + guint s, e; + GtkFilterListModel *filtered; + GtkFilter *filter; + + list = gtk_string_list_new (strings); + sorter = GTK_SORTER (gtk_string_sorter_new (gtk_property_expression_new (GTK_TYPE_STRING_OBJECT, NULL, "string"))); + sorted = gtk_sort_list_model_new (G_LIST_MODEL (list), sorter); + section_sorter = GTK_SORTER (gtk_custom_sorter_new (sort_func, NULL, NULL)); + gtk_sort_list_model_set_section_sorter (GTK_SORT_LIST_MODEL (sorted), section_sorter); + g_object_unref (section_sorter); + + gtk_section_model_get_section (GTK_SECTION_MODEL (sorted), 0, &s, &e); + g_assert_cmpint (s, ==, 0); + g_assert_cmpint (e, ==, 3); + gtk_section_model_get_section (GTK_SECTION_MODEL (sorted), 3, &s, &e); + g_assert_cmpint (s, ==, 3); + g_assert_cmpint (e, ==, 6); + gtk_section_model_get_section (GTK_SECTION_MODEL (sorted), 6, &s, &e); + g_assert_cmpint (s, ==, 6); + g_assert_cmpint (e, ==, 8); + + filtered = gtk_filter_list_model_new (NULL, NULL); + gtk_section_model_get_section (GTK_SECTION_MODEL (filtered), 0, &s, &e); + g_assert_cmpint (s, ==, 0); + g_assert_cmpint (e, ==, G_MAXUINT); + + gtk_filter_list_model_set_model (filtered, G_LIST_MODEL (sorted)); + gtk_section_model_get_section (GTK_SECTION_MODEL (filtered), 0, &s, &e); + g_assert_cmpint (s, ==, 0); + g_assert_cmpint (e, ==, 3); + + filter = GTK_FILTER (gtk_custom_filter_new (filter_func, NULL, NULL)); + gtk_filter_list_model_set_filter (filtered, filter); + g_object_unref (filter); + + gtk_section_model_get_section (GTK_SECTION_MODEL (filtered), 0, &s, &e); + g_assert_cmpint (s, ==, 0); + g_assert_cmpint (e, ==, 2); + gtk_section_model_get_section (GTK_SECTION_MODEL (filtered), 2, &s, &e); + g_assert_cmpint (s, ==, 2); + g_assert_cmpint (e, ==, 3); + gtk_section_model_get_section (GTK_SECTION_MODEL (filtered), 3, &s, &e); + g_assert_cmpint (s, ==, 3); + g_assert_cmpint (e, ==, 4); + + g_object_unref (filtered); + g_object_unref (sorted); +} + int main (int argc, char *argv[]) { @@ -472,6 +560,7 @@ main (int argc, char *argv[]) g_test_add_func ("/filterlistmodel/incremental", test_incremental); g_test_add_func ("/filterlistmodel/empty", test_empty); g_test_add_func ("/filterlistmodel/add_remove_item", test_add_remove_item); + g_test_add_func ("/filterlistmodel/sections", test_sections); return g_test_run (); } |