Add a test for sortlistmodel sections
authorMatthias Clasen <mclasen@redhat.com>
Sat, 26 Feb 2022 23:52:49 +0000 (18:52 -0500)
committerBenjamin Otte <otte@redhat.com>
Tue, 9 May 2023 15:00:39 +0000 (17:00 +0200)
testsuite/gtk/sortlistmodel.c

index 6a1753373c845357c978caeac180ef25f8447275..d2cd69926901b32ac6483711d325faef3d785635 100644 (file)
@@ -258,7 +258,7 @@ test_create (void)
 {
   GtkSortListModel *sort;
   GListStore *store;
-  
+
   store = new_store ((guint[]) { 4, 8, 2, 6, 10, 0 });
   sort = new_model (store);
   assert_model (sort, "2 4 6 8 10");
@@ -280,7 +280,7 @@ test_set_model (void)
 {
   GtkSortListModel *sort;
   GListStore *store;
-  
+
   sort = new_model (NULL);
   assert_model (sort, "");
   assert_changes (sort, "");
@@ -319,7 +319,7 @@ test_set_sorter (void)
   GtkSortListModel *sort;
   GtkSorter *sorter;
   GListStore *store;
-  
+
   store = new_store ((guint[]) { 4, 8, 2, 6, 10, 0 });
   sort = new_model (store);
   assert_model (sort, "2 4 6 8 10");
@@ -350,7 +350,7 @@ test_add_items (void)
 {
   GtkSortListModel *sort;
   GListStore *store;
-  
+
   /* add beginning */
   store = new_store ((guint[]) { 51, 99, 100, 49, 50, 0 });
   sort = new_model (store);
@@ -390,7 +390,7 @@ test_remove_items (void)
 {
   GtkSortListModel *sort;
   GListStore *store;
-  
+
   /* remove beginning */
   store = new_store ((guint[]) { 51, 99, 100, 49, 1, 2, 50, 0 });
   sort = new_model (store);
@@ -570,6 +570,58 @@ test_add_remove_item (void)
   g_object_unref (sort);
 }
 
+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 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;
+
+  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);
+
+  g_object_unref (sorted);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -589,6 +641,7 @@ main (int argc, char *argv[])
   g_test_add_func ("/sortlistmodel/incremental/remove", test_incremental_remove);
   g_test_add_func ("/sortlistmodel/oob-access", test_out_of_bounds_access);
   g_test_add_func ("/sortlistmodel/add-remove-item", test_add_remove_item);
+  g_test_add_func ("/sortlistmodel/sections", test_sections);
 
   return g_test_run ();
 }