[gtk+] Add listbox tests



commit 8fbe284c5f80995c82855a940bb23672799e3912
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Jun 15 16:02:16 2013 -0400

    Add listbox tests

 testsuite/gtk/Makefile.am |    1 +
 testsuite/gtk/listbox.c   |  340 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 341 insertions(+), 0 deletions(-)
---
diff --git a/testsuite/gtk/Makefile.am b/testsuite/gtk/Makefile.am
index ee0022a..6b602a9 100644
--- a/testsuite/gtk/Makefile.am
+++ b/testsuite/gtk/Makefile.am
@@ -38,6 +38,7 @@ TEST_PROGS +=                         \
        grid                    \
        gtkmenu                 \
        keyhash                 \
+       listbox                 \
        objects-finalize        \
        papersize               \
        rbtree                  \
diff --git a/testsuite/gtk/listbox.c b/testsuite/gtk/listbox.c
new file mode 100644
index 0000000..6db1276
--- /dev/null
+++ b/testsuite/gtk/listbox.c
@@ -0,0 +1,340 @@
+#include <gtk/gtk.h>
+
+static gint
+sort_list (GtkListBoxRow *row1,
+           GtkListBoxRow *row2,
+           gpointer       data)
+{
+  GtkWidget *label1, *label2;
+  gint n1, n2;
+  gint *count = data;
+
+  (*count)++;
+
+  label1 = gtk_bin_get_child (GTK_BIN (row1));
+  n1 = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label1), "data"));
+
+  label2 = gtk_bin_get_child (GTK_BIN (row2));
+  n2 = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label2), "data"));
+
+  return (n1 - n2);
+}
+
+static void
+check_sorted (GtkListBox *list)
+{
+  GList *children;
+  GtkWidget *row, *label;
+  gint n1, n2;
+  GList *l;
+
+  n2 = n1 = 0;
+  children = gtk_container_get_children (GTK_CONTAINER (list));
+  for (l = children; l; l = l->next)
+    {
+      row = l->data;
+      n1 = n2;
+      label = gtk_bin_get_child (GTK_BIN (row));
+      n2 = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label), "data"));
+      g_assert_cmpint (n1, <=, n2);
+    }
+  g_list_free (children);
+}
+
+static void
+test_sort (void)
+{
+  GtkListBox *list;
+  GtkListBoxRow *row;
+  GtkWidget *label;
+  gint i, r;
+  gchar *s;
+  gint count;
+
+  list = GTK_LIST_BOX (gtk_list_box_new ());
+  g_object_ref_sink (list);
+  gtk_widget_show (GTK_WIDGET (list));
+
+  for (i = 0; i < 100; i++)
+    {
+      r = g_random_int_range (0, 1000);
+      s = g_strdup_printf ("%d: %d", i, r);
+      label = gtk_label_new (s);
+      g_object_set_data (G_OBJECT (label), "data", GINT_TO_POINTER (r));
+      g_free (s);
+      gtk_container_add (GTK_CONTAINER (list), label);
+    }
+
+  count = 0;
+  gtk_list_box_set_sort_func (list, sort_list, &count, NULL);
+  g_assert_cmpint (count, >, 0);
+
+  check_sorted (list);
+
+  count = 0;
+  gtk_list_box_invalidate_sort (list);
+  g_assert_cmpint (count, >, 0);
+
+  count = 0;
+  row = gtk_list_box_get_row_at_index (list, 0);
+  gtk_list_box_row_changed (row);
+  g_assert_cmpint (count, >, 0);
+
+  g_object_unref (list);
+}
+
+static GtkListBoxRow *callback_row;
+
+static void
+on_row_selected (GtkListBox    *list_box,
+                 GtkListBoxRow *row,
+                 gpointer       data)
+{
+  gint *i = data;
+
+  (*i)++;
+
+  callback_row = row;
+}
+
+static void
+test_selection (void)
+{
+  GtkListBox *list;
+  GtkListBoxRow *row, *row2;
+  GtkWidget *label;
+  gint i;
+  gchar *s;
+  gint count;
+
+  list = GTK_LIST_BOX (gtk_list_box_new ());
+  g_object_ref_sink (list);
+  gtk_widget_show (GTK_WIDGET (list));
+
+  g_assert_cmpint (gtk_list_box_get_selection_mode (list), ==, GTK_SELECTION_SINGLE);
+  g_assert (gtk_list_box_get_selected_row (list) == NULL);
+
+  for (i = 0; i < 100; i++)
+    {
+      s = g_strdup_printf ("%d", i);
+      label = gtk_label_new (s);
+      g_object_set_data (G_OBJECT (label), "data", GINT_TO_POINTER (i));
+      g_free (s);
+      gtk_container_add (GTK_CONTAINER (list), label);
+    }
+
+  count = 0;
+  g_signal_connect (list, "row-selected",
+                    G_CALLBACK (on_row_selected),
+                    &count);
+
+  row = gtk_list_box_get_row_at_index (list, 20);
+  gtk_list_box_select_row (list, row);
+  g_assert (callback_row == row);
+  g_assert_cmpint (count, ==, 1);
+  row2 = gtk_list_box_get_selected_row (list);
+  g_assert (row2 == row);
+
+  gtk_list_box_set_selection_mode (list, GTK_SELECTION_BROWSE);
+  gtk_container_remove (GTK_CONTAINER (list), GTK_WIDGET (row));
+  g_assert (callback_row == NULL);
+  g_assert_cmpint (count, ==, 2);
+  row2 = gtk_list_box_get_selected_row (list);
+  g_assert (row2 == NULL);
+
+  row = gtk_list_box_get_row_at_index (list, 20);
+  gtk_list_box_select_row (list, row);
+  g_assert (callback_row == row);
+  g_assert_cmpint (count, ==, 3);
+
+  gtk_list_box_set_selection_mode (list, GTK_SELECTION_NONE);
+  g_assert (callback_row == NULL);
+  g_assert_cmpint (count, ==, 4);
+  row2 = gtk_list_box_get_selected_row (list);
+  g_assert (row2 == NULL);
+
+  g_object_unref (list);
+}
+
+static gboolean
+filter_func (GtkListBoxRow *row,
+             gpointer       data)
+{
+  gint *count = data;
+  GtkWidget *child;
+  gint i;
+
+  (*count)++;
+
+  child = gtk_bin_get_child (GTK_BIN (row));
+  i = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (child), "data"));
+
+  return (i % 2) == 0;
+}
+
+static void
+check_filtered (GtkListBox *list)
+{
+  GList *children, *l;
+  gint count;
+  GtkWidget *row;
+
+  count = 0;
+  children = gtk_container_get_children (GTK_CONTAINER (list));
+  for (l = children; l; l = l->next)
+    {
+      row = l->data;
+      if (gtk_widget_get_child_visible (row))
+        count++;
+    }
+  g_list_free (children);
+  g_assert_cmpint (count, ==, 50);
+}
+
+static void
+test_filter (void)
+{
+  GtkListBox *list;
+  GtkListBoxRow *row;
+  gint i;
+  gchar *s;
+  GtkWidget *label;
+  gint count;
+
+  list = GTK_LIST_BOX (gtk_list_box_new ());
+  g_object_ref_sink (list);
+  gtk_widget_show (GTK_WIDGET (list));
+
+  g_assert_cmpint (gtk_list_box_get_selection_mode (list), ==, GTK_SELECTION_SINGLE);
+  g_assert (gtk_list_box_get_selected_row (list) == NULL);
+
+  for (i = 0; i < 100; i++)
+    {
+      s = g_strdup_printf ("%d", i);
+      label = gtk_label_new (s);
+      g_object_set_data (G_OBJECT (label), "data", GINT_TO_POINTER (i));
+      g_free (s);
+      gtk_container_add (GTK_CONTAINER (list), label);
+    }
+
+  count = 0;
+  gtk_list_box_set_filter_func (list, filter_func, &count, NULL);
+  g_assert_cmpint (count, >, 0);
+
+  check_filtered (list);
+
+  count = 0;
+  gtk_list_box_invalidate_filter (list);
+  g_assert_cmpint (count, >, 0);
+
+  count = 0;
+  row = gtk_list_box_get_row_at_index (list, 0);
+  gtk_list_box_row_changed (row);
+  g_assert_cmpint (count, >, 0);
+
+  g_object_unref (list);
+}
+
+static void
+header_func (GtkListBoxRow *row,
+             GtkListBoxRow *before,
+             gpointer       data)
+{
+  GtkWidget *child;
+  gint i;
+  gint *count = data;
+  GtkWidget *header;
+  gchar *s;
+
+  (*count)++;
+
+  child = gtk_bin_get_child (GTK_BIN (row));
+  i = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (child), "data"));
+
+  if (i % 2 == 0)
+    {
+      s = g_strdup_printf ("Header %d", i);
+      header = gtk_label_new (s);
+      g_free (s);
+    }
+  else
+    header = NULL;
+
+  gtk_list_box_row_set_header (row, header);
+}
+
+static void
+check_headers (GtkListBox *list)
+{
+  GList *children, *l;
+  gint count;
+  GtkListBoxRow *row;
+
+  count = 0;
+  children = gtk_container_get_children (GTK_CONTAINER (list));
+  for (l = children; l; l = l->next)
+    {
+      row = l->data;
+      if (gtk_list_box_row_get_header (row) != NULL)
+        count++;
+    }
+  g_list_free (children);
+  g_assert_cmpint (count, ==, 50);
+}
+
+static void
+test_header (void)
+{
+  GtkListBox *list;
+  GtkListBoxRow *row;
+  gint i;
+  gchar *s;
+  GtkWidget *label;
+  gint count;
+
+  list = GTK_LIST_BOX (gtk_list_box_new ());
+  g_object_ref_sink (list);
+  gtk_widget_show (GTK_WIDGET (list));
+
+  g_assert_cmpint (gtk_list_box_get_selection_mode (list), ==, GTK_SELECTION_SINGLE);
+  g_assert (gtk_list_box_get_selected_row (list) == NULL);
+
+  for (i = 0; i < 100; i++)
+    {
+      s = g_strdup_printf ("%d", i);
+      label = gtk_label_new (s);
+      g_object_set_data (G_OBJECT (label), "data", GINT_TO_POINTER (i));
+      g_free (s);
+      gtk_container_add (GTK_CONTAINER (list), label);
+    }
+
+  count = 0;
+  gtk_list_box_set_header_func (list, header_func, &count, NULL);
+  g_assert_cmpint (count, >, 0);
+
+  check_headers (list);
+
+  count = 0;
+  gtk_list_box_invalidate_headers (list);
+  g_assert_cmpint (count, >, 0);
+
+  count = 0;
+  row = gtk_list_box_get_row_at_index (list, 0);
+  gtk_list_box_row_changed (row);
+  g_assert_cmpint (count, >, 0);
+
+  g_object_unref (list);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv);
+
+  g_test_add_func ("/listbox/sort", test_sort);
+  g_test_add_func ("/listbox/selection", test_selection);
+  g_test_add_func ("/listbox/filter", test_filter);
+  g_test_add_func ("/listbox/header", test_header);
+
+  return g_test_run ();
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]